我的查询看起来像这样(简化版)
SELECT
title,
count(title) c,
SUM(
id IN
(SELECT
otherID
FROM
otherTable
WHERE someTrait IN (18, 19, 29, 20, 21, 30))
) s
from
`TABLE`
GROUP BY title
HAVING t-s > 0
运行前几次需要2秒钟,然后在缓存后大约.15秒内运行,但有时会在重复执行后反弹回2秒
现在,说我接受子查询
SELECT
otherID
FROM
otherTable
WHERE someTrait IN (18, 19, 29, 20, 21, 30)
我得到的结果是.1秒。结果如下:
(1,27,145,600,1234)
所以我把它分成了这个
的原始查询SELECT
title,
count(title) t,
SUM(id IN (1, 27, 145, 600, 1234)) s
FROM
`TABLE`
GROUP BY title
HAVING t-s > 0
第一次运行需要0.6秒,然后在重复执行后需要0.05到0.15秒,但是从来没有像第一次查询那样达到完整的.6秒。
为什么MySQL需要更长的时间才能运行第一个查询?是否有正确的“MySql方式”来完成我所做的事情,即获取子查询的结果,保存它,并将其直接放入我的其他查询?
我正在使用php,所以目前我正在进行第一个查询,将结果存储到逗号分隔值字符串,并将其传递给第二个查询,但我觉得我在那里 应该是一个更好的方法,或者有一些关于我错过的MySql的关键点。
就此而言,我希望尽可能使用JOIN
或LEFT JOIN
代替IN
,但因为它是SUM
的论据,所以我没有'看看如何做到这一点。