[英]mysql query very slow
I have a very slow query because using ORDER BY. 我有一个非常慢的查询,因为使用ORDER BY。 Now i understand why it is slow but i have no idea how i make it faster. 现在我明白了为什么它变慢了,但是我不知道如何使它变快。
The table got like 13,000,000 records. 该表获得了大约13,000,000条记录。 (the reason why it is slow) (缓慢的原因)
Tables 30 Rows 13,591,548 Data 1.3 GiB Indexes 265.2 MiB Total 1.5 GiB Overhead 96 B 表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'");
Is there any better solution for this problem? 有没有更好的解决方案来解决这个问题?
First review your table indexes. 首先查看您的表索引。
In php you don't need to perform one update for each 40 row, run your update
then select
and after, perform a loop to show information about rows from select
, like: 在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."-";
}
Try instead change your UPDATE query to update all the records in one update by adding JOIN 尝试通过添加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.