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

时间:2017-09-12 17:45:47

标签: mysql sql

我的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个条目下)。

3 个答案:

答案 0 :(得分:0)

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

date > '1473700785'

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

索引很好,但我认为不需要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