PHP -最快的方式下载表数据到CSV -大数据


PHP - Fastest way to download Table data to a CSV - Large Data

我有一个大表,500,000条记录,点击一个按钮的数据下载,但它是非常慢的,特别是在一个坏的互联网。

我正在考虑压缩文件,然后保存它,但我确定它会占用额外的内存为整个过程。

是否有更好的方法来优化这个CSV下载

<?php
        // mysql database connection details
        $host = "localhost";
        $username = "admin";
        $password = "root";
        $dbname = "db_books";
        // open connection to mysql database
        $connection = mysqli_connect($host, $username, $password, $dbname) or die("Connection Error " . mysqli_error($connection));
        // fetch mysql table rows
        $sql = "select * from tbl_books";
        $result = mysqli_query($connection, $sql) or die("Selection Error " . mysqli_error($connection));
        $fp = fopen('books.csv', 'w');
        while($row = mysqli_fetch_assoc($result))
        {
            fputcsv($fp, $row);
        }
        fclose($fp);
        //close the db connection
        mysqli_close($connection);
    ?>

我将使用MySQL INTO OUTFILE。它比遍历查询结果要快得多。你把它添加到你的select语句中,MySQL就会为你创建文件。

听起来您正在使用页面加载线程在发送给用户之前编译CSV。这就是为什么它看起来那么慢。

如果可能的话,您可能希望在用户下载CSV文件之前对其进行预编译。这样,他们的浏览器将简单地接收文件,而不是在生成文件时挂起。如果您担心浪费太多时间生成用户从不下载的文件,也许可以设置一个后台作业,在需要时生成文件,但只有当用户在最近X小时内登录(或进入您站点的某个区域)时才生成文件。

或者,也许您可以使用jQuery/Ajax来显示一个弹出对话框,告诉用户在生成文件时等待,然后在下载准备好后消失。