0

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

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

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

4

2 回答 2

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
于 2013-08-02T14:58:46.890 回答
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

关于临时表的创建见这里

于 2013-08-02T14:42:33.490 回答