在sql中按ID选择多行的最佳方法是什么?

时间:2010-03-04 12:53:05

标签: sql optimization

我需要选择多条记录

我用

SELECT *
FROM `table`
WHERE `ID` =5623
OR `ID` =5625
OR `ID` =5628
OR `ID` =5621

此查询在每秒第三次运行php

运行4次

有更好更快的方法吗?

5 个答案:

答案 0 :(得分:45)

SELECT *
FROM `table`
where ID in (5263, 5625, 5628, 5621) 

可能更好,但速度不快。

答案 1 :(得分:6)

除了人们所说的内容(其中id):

1)iF有很多ID,最好将它们粘贴到临时表中并运行与临时表的连接

2)确保您的表具有id

的索引

3)如果数据的实时性不重要,请将查询结果放在应用程序端的缓存中

答案 2 :(得分:4)

SELECT *
FROM `table`
WHERE `ID` in (5623, 5625, 5628, 5621)

在进一步研究时,我遇到了一个有趣的博客post,它解释了如何使用集合从In子句中获得更快的SQL性能,通过在公用表表达式(CTE)中创建id列表然后加入在那。

因此,您可以编写以下PHP的等效代码以获得最佳性能。

DECLARE  @idList varchar(256) 
SET @idList = '5623, 5625, 5628, 5621'

;with ids (id) as
(
    SELECT value FROM UTILfn_Split(@idList,',')
)

SELECT     t.* 
FROM     table as t
INNER JOIN    ids
ON        t.ID = ids.id

答案 3 :(得分:2)

SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)

但是每秒四次是很多。我会考虑另一种需要较少数据库访问的方法。

答案 4 :(得分:1)

如果你这样做

SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)

你应该没问题,只要ID的数量不会太大。我建议你为ID创建一个索引,这样查询的执行速度会更快。

另外,请考虑更改逻辑,这样就不必传递那么多ID