6

我想知道其中哪一个会更快(在性能方面)查询(如果这很重要,在 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);

我有大约 50id秒的时间要查询。我知道通常数据库连接很昂贵,但我发现该IN子句 [有时] 也不是那么快。

4

5 回答 5

5

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

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

于 2012-05-13T13:12:09.277 回答
3

恕我直言,您应该尝试一下并测量响应时间:IN应该会给您更好的性能...
无论如何,如果您的 id 是连续的,您可以尝试

SELECT * FROM table_name WHERE id BETWEEN 1 AND 50
于 2012-05-13T13:12:11.417 回答
0

这是另一篇文章,讨论了使用 OR 与 IN 的性能。 SQL WHERE 子句中的 IN 与 OR

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

于 2012-05-13T13:14:41.953 回答
0

2nd会更快,因为在查询被解释时以及在与mysql进行php通信以发送查询和等待结果时会消耗资源,如果您的数据是连续的,您也可以这样做

   SELECT * FROM table_name WHERE id <= 50;
于 2012-05-13T13:30:25.990 回答
0

IN在一个子句中试验了 3000 多个值之后,我正在研究这个。事实证明,它比单个SELECTs 快很多,因为 s 中引用的列IN没有键控。我的猜测是,在我的情况下,它只需要为该列构建一个临时索引一次,而不是 3000 次单独的时间。

于 2012-05-30T15:21:43.450 回答