繁体   English   中英

如何加快非常慢的MySQL查询?

[英]How to speed up a very slow MySQL query?

我的MySQL语法非常慢,因为该表已增长到5000多个条目,因此基本上无法使用。 它需要30秒钟以上,因此服务器发送错误代码并退出。

语法为:

SELECT 
    id, 
    user_id, 
    date 
FROM
    table 
WHERE 
    id IN (
           SELECT 
               MAX(id)
           FROM 
               table
           GROUP BY date
          ) 
    AND 
    company_id = '1'
    AND 
    date > '1473700785'
    AND
    complete = '1'
    AND
    name = "random string" 
ORDER BY id ASC

结构体:

id - int(11)
user_id - int(10)
company_id - int(11)
date - varchar(20)
complete - varchar(2)
name - varchar(75)

您有什么可能会减慢它的速度吗? 它曾经以较小的表大小(小于1000个条目)正常工作。

首先,您需要日期字段的索引。 并且您需要将日期存储为整数,因为您使用此表达式

date > '1473700785'

除了子查询(如下所示)之外,最好的方法是建立索引。 就像这里大多数人的建议

SELECT id, user_id, date 
FROM table min

--sub queries sometimes run faster than IN / NOT IN 

JOIN (
          SELECT SELECT MAX(id) 
          FROM table 
          GROUP BY date
      ) 
          max on max.id = min.id

WHERE min.company_id = '1' 
 AND min.date > '1473700785' 
 AND min.complete = '1' 
 AND min.name = "random string" 

ORDER BY min.id ASC

索引很好,但是我看不到需要SUB-SELECT

SELECT 
    MAX(t.id) as id, 
    u.user_id, 
    t.date 
FROM table t
JOIN table u ON u.id=MAX(t.id )
WHERE 
    t.company_id = '1'
    AND 
    t.date > '1473700785'
    AND
    t. complete = '1'
    AND
    t.name = "random string" 
GROUP BY t.date
ORDER BY t.id ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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