简体   繁体   English

mysql查询很慢

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM