簡體   English   中英

mysql查詢很慢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM