如何从具有 10k 条记录的 mysql 数据库中快速检索数据

Posted

技术标签:

【中文标题】如何从具有 10k 条记录的 mysql 数据库中快速检索数据【英文标题】:How to retrieve data fast from mysql database which has 10k records 【发布时间】:2016-01-12 10:35:28 【问题描述】:

我有一个页面,我必须在其中显示我数据库中的所有记录,但是当我刷新它时会花费很多时间。 html部分加载速度很快,但光标到达我的mysql查询需要很长时间才能加载.. 这是我的查询

$srchresult = mysql_query("SELECT `date`,`chalno`,`custcode`,`vessel`,`rankcode`,`crew`,`ppno`,`cdcno` FROM `$maindb` WHERE `series`='$zseries' Order By `date`, `chalno` desc")or die(mysql_error());
                                while ($row = mysql_fetch_array($srchresult)) 
                                    $mdate = strtotime("d-m-Y", $row[date]);
                                    echo "<tr>";
                                    echo "<td align='left'>$mdate</td>";
                                    echo "<td align='left'>$row[chalno]</td>";
                                    echo "<td align='left'>$row[custcode]</td>";
                                    echo "<td align='left'>$row[vessel]</td>";
                                    echo "<td align='left'>$row[rankcode]</td>";
                                    echo "<td align='left'>$row[crew]</td>";
                                    echo "<td align='left'>$row[ppno]</td>";
                                    echo "<td align='left'>$row[cdcno]</td>";
                                    echo "<td align='left'><a href=\"$file?mode=edit&$keyfld=$row[$keyfld]&series=$zseries\"><i class='fa fa-pencil' style='font-size:1.3em;color:#00C0EF;cursor:pointer;'></i></a></td>";
                                    echo "</tr>";
                                
                            

【问题讨论】:

确保您的数据库表上有合理的索引,例如在series 列上 @MarkBaker 我确实对系列和 chalno 都有索引 ***.com/questions/15547040/… 然后对查询进行 EXPLAIN 以查看 MySQL 是如何执行它的,以及它是否正在使用这些索引 【参考方案1】:

我强烈建议使用分页,以便能够在页面上呈现/浏览 10k 条记录。

如果您必须在布局中没有可见分页块的情况下执行此操作,请使用 无限滚动 解决方案。这是一个相当简单的:http://www.infotuts.com/ajax-infinite-scroll-using-jquery-php-mysql/

您的 mysql 查询很好,即使您至少应该使用 PHP 的 mysqli 扩展 (http://php.net/manual/en/intro.mysqli.php) 来检索数据。

【讨论】:

实际上我正在使用 dataTables 以模式显示我的数据,所以我不认为无限滚动是完美的解决方案。 如果我写 msqli_query 它给我一个错误 mysqli_query() 需要 2 个参数,1

以上是关于如何从具有 10k 条记录的 mysql 数据库中快速检索数据的主要内容,如果未能解决你的问题,请参考以下文章

从mysql数据库中提取5条随机记录[关闭]

如何从mysql中的表中选择N条记录

如何从重复记录中检索mysql表中的最新数据

如何在具有数百条记录的现有csv中添加新列并从数组中填充它?

如何从Mysql中的所有表中删除一条唯一记录

试图从phpmyadmin导出一个大表,只导出2675条记录