Подтвердить что ты не робот

Каков наилучший способ выбрать несколько строк по ID в sql?

Мне нужно выбрать несколько записей

Я использую

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

этот запрос выполняется 4 раза в секунду с php

Есть ли лучший и быстрый способ для этого?

4b9b3361

Ответ 1

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

вероятно, лучше, но не быстрее.

Ответ 2

В дополнение к тому, что говорили люди (где id in):

1) iF есть много идентификаторов, лучше вставлять их в таблицу temp и запускать соединение с этой временной таблицей

2) Убедитесь, что ваша таблица имеет индекс на id

3) Если реальная актуальность данных не является критичной, поместите результаты запроса в кеш на стороне приложения

Ответ 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

Ответ 4

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

Но четыре раза в секунду много. Я бы подумал о другом подходе, который требует меньшего доступа к базе данных.

Ответ 5

Если вы делаете

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

Вы должны быть в порядке, если число ID не становится слишком большим. Я предлагаю вам создать индекс для идентификаторов, поэтому запрос будет выполняться быстрее.

Кроме того, рассмотрите возможность изменения вашей логики, поэтому вам не нужно передавать этот много идентификаторов