使用IN子句与多个SELECT

时间:2012-05-13 13:09:34

标签: php mysql

我想知道哪一个更快(性能方面)查询(如果这很重要的话,在MySQL 5.x CentOS 5.x上):

SELECT * FROM table_name WHERE id=1;
SELECT * FROM table_name WHERE id=2;
.
.
.
SELECT * FROM table_name WHERE id=50;

...或

SELECT * FROM table_name WHERE id IN (1,2,...,50);

我有大约50个id来查询。我知道通常DB连接很昂贵,但我已经看到IN子句[有时]不是那么快。

5 个答案:

答案 0 :(得分:3)

我很确定第二个选项可以为您提供最佳性能;一个查询,一个结果。你必须开始寻找>之前的100个项目可能会成为一个问题。

另请参阅此处接受的答案:MySQL "IN" operator performance on (large?) number of values

答案 1 :(得分:2)

恕我直言,你应该尝试并测量响应时间:IN应该会给你更好的表现...
无论如何,如果您的ID是连续的,您可以尝试

SELECT * FROM table_name WHERE id BETWEEN 1 AND 50

答案 2 :(得分:0)

这是另一个讨论使用OR与IN的性能的帖子。 IN vs OR in the SQL WHERE Clause

您建议使用多个查询,但使用OR也可以。

答案 3 :(得分:0)

第二个会更快,因为在查询被解释时消耗资源,并且在与mysql进行php通信时发送查询并等待结果,如果你的数据是顺序的,你也可以只做

   SELECT * FROM table_name WHERE id <= 50;

答案 4 :(得分:0)

我在IN条款中试验了3000多个值后,正在研究这个问题。事实证明,由于SELECT中引用的列没有键入,因此比单个IN更快。我的猜测是,在我的情况下,它只需要为该列构建一次临时索引而不是3000次单独的时间。