如何从具有 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 数据库中快速检索数据的主要内容,如果未能解决你的问题,请参考以下文章