Мне нужно выбрать несколько записей
Я использую
SELECT *
FROM 'table'
WHERE 'ID' =5623
OR 'ID' =5625
OR 'ID' =5628
OR 'ID' =5621
этот запрос выполняется 4 раза в секунду с php
Есть ли лучший и быстрый способ для этого?
Мне нужно выбрать несколько записей
Я использую
SELECT *
FROM 'table'
WHERE 'ID' =5623
OR 'ID' =5625
OR 'ID' =5628
OR 'ID' =5621
этот запрос выполняется 4 раза в секунду с php
Есть ли лучший и быстрый способ для этого?
SELECT *
FROM `table`
where ID in (5263, 5625, 5628, 5621)
вероятно, лучше, но не быстрее.
В дополнение к тому, что говорили люди (где id in):
1) iF есть много идентификаторов, лучше вставлять их в таблицу temp и запускать соединение с этой временной таблицей
2) Убедитесь, что ваша таблица имеет индекс на id
3) Если реальная актуальность данных не является критичной, поместите результаты запроса в кеш на стороне приложения
SELECT *
FROM `table`
WHERE `ID` in (5623, 5625, 5628, 5621)
Во время исследования этого я натолкнулся на интересный блог post, в котором объясняется, как использовать набор, чтобы получить более быструю производительность SQL из In, создавая список идентификаторов в Common Table Expression (CTE), а затем присоединяется к этому.
Таким образом, вы можете закодировать эквивалент 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
SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)
Но четыре раза в секунду много. Я бы подумал о другом подходе, который требует меньшего доступа к базе данных.
Если вы делаете
SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)
Вы должны быть в порядке, если число ID не становится слишком большим. Я предлагаю вам создать индекс для идентификаторов, поэтому запрос будет выполняться быстрее.
Кроме того, рассмотрите возможность изменения вашей логики, поэтому вам не нужно передавать этот много идентификаторов