我需要选择多条记录
我用
SELECT *
FROM `table`
WHERE `ID` =5623
OR `ID` =5625
OR `ID` =5628
OR `ID` =5621
此查询在每秒第三次运行php
运行4次有更好更快的方法吗?
答案 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