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