考虑到我的需求,我有一个简单的查询太慢了。查询是:
SELECT a FROM tableA WHERE b IN ("SOME_IDS_LIST") ORDER BY a
tableA有大约300 000行并包含索引(a,b)。 “SOME_IDS_LIST”列表越长,查询越慢。有没有办法加速这种查询?我一直在寻找互联网上的通用解决方案,但没有运气。
答案 0 :(得分:1)
在你的桌子上放一个b字段的索引。
如果结果太慢。
而是使用IN子句,使用您的ID广告创建一个临时表,使用INNER JOIN语句将您的临时表与tableA链接。
你的剧本:
CREATE TEMPORARY TABLE myTempTable (id int)
INSERT INTO myTempTable (all your ID)
SELECT *
FROM tableA
JOIN myTempTable
ON tableA.b = myTempTable.id
关于创建临时表see here
答案 1 :(得分:1)
测试EXISTS条款是值得的。与IN子句相比,这些通常可以显着提升性能。这又需要一个临时表
CREATE TEMPORARY TABLE myTempTable (id int)
INSERT INTO myTempTable (all your ID)
SELECT TA.a
FROM tableA TA
WHERE EXISTS
(SELECT *
FROM myTempTable TT
WHERE TT.id = TA.b
)
ORDER BY
TA.a