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