[英]mysql query very slow
我有一个非常慢的查询,因为使用ORDER BY。 现在我明白了为什么它变慢了,但是我不知道如何使它变快。
该表获得了大约13,000,000条记录。 (缓慢的原因)
表30行13,591,548数据1.3 GiB索引265.2 MiB总计1.5 GiB开销96 B
$sql3 = mysql_query("SELECT * FROM config LIMIT 1");
$row3 = mysql_fetch_assoc($sql3);
$log=$row3['con_log'];
$sql2 = mysql_query("SELECT sl_start,sl_id FROM scan_list2 WHERE sl_scanned='0' ORDER BY sl_id LIMIT 40");
while($row2 = mysql_fetch_assoc($sql2)){
echo "crk|".$row2['sl_start']."|".$log."-";
$sl_id = $row2['sl_id'];
mysql_query("UPDATE scan_list2 SET sl_scanned='1' WHERE sl_id='$sl_id'");
有没有更好的解决方案来解决这个问题?
首先查看您的表索引。
在php中,您不需要为每40行执行一次更新,运行update
然后select
和之后,执行循环以显示select
有关行的信息,例如:
mysql_query("UPDATE scan_list2 SET sl_scanned = '1' WHERE sl_scanned = '0' ORDER BY sl_id LIMIT 40");
$sql3 = mysql_query("SELECT * FROM config LIMIT 1");
$row3 = mysql_fetch_assoc($sql3);
$log=$row3['con_log'];
$sql2 = mysql_query("SELECT sl_start,sl_id FROM scan_list2 WHERE sl_scanned = '1' ORDER BY sl_id DESC LIMIT 40");
while($row2 = mysql_fetch_assoc($sql2)){
echo "crk|".$row2['sl_start']."|".$log."-";
}
尝试通过添加JOIN更改您的UPDATE查询以一次更新所有记录。
UPDATE scan_list2
INNER JOIN
(
SELECT sl_start,sl_id
FROM scan_list2
WHERE sl_scanned='0'
ORDER BY sl_id
LIMIT 40
) b ON scan_list2.sl_id = b.sl_id
SET sl_scanned='1'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.