首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询非常慢

mysql查询非常慢
EN

Stack Overflow用户
提问于 2014-04-17 02:29:31
回答 2查看 119关注 0票数 0

我有一个非常慢的查询,因为使用ORDER。现在我明白了它为什么慢,但我不知道我如何使它更快。

这张桌子有1300万份记录。(速度慢的原因)

表30行13,591,548数据1.3 GiB索引265.2 MiB总计1.5 GiB开销96 B

代码语言:javascript
复制
$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'");

对这个问题有什么更好的解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-17 03:14:05

首先检查您的表索引。

在php中,您不需要对每40行执行一次更新,然后运行update然后运行select,然后执行一个循环来显示来自select的行的信息,例如:

代码语言:javascript
复制
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."-";
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-17 05:27:50

相反,通过添加联接,尝试更改更新查询以更新一次更新中的所有记录。

代码语言:javascript
复制
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' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23123542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档