如何编写有效的“SELECT a FROM t WHERE b IN()ORDER BY”查询?

时间:2013-08-02 14:38:51

标签: mysql sql database

考虑到我的需求,我有一个简单的查询太慢了。查询是:

SELECT a FROM tableA WHERE b IN ("SOME_IDS_LIST") ORDER BY a

tableA有大约300 000行并包含索引(a,b)。 “SOME_IDS_LIST”列表越长,查询越慢。有没有办法加速这种查询?我一直在寻找互联网上的通用解决方案,但没有运气。

2 个答案:

答案 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