考虑到我的需要,我有一个简单的查询太慢了。查询是:
SELECT a FROM tableA WHERE b IN ("SOME_IDS_LIST") ORDER BY a
tableA 有大约 300 000 行并包含索引 (a,b)。“SOME_IDS_LIST”列表越长,查询越慢。有什么方法可以加快这种查询?我在互联网上寻找一些通用的解决方案,但没有运气。
测试 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
在你的表上放一个 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
关于临时表的创建见这里