Используйте IN для первичного ключа нескольких столбцов - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть два столбца первичного ключа (id, id2) в MySql.Эти идентификаторы имеют прямое соединение (для id = 1 id2 = 11, для id = 2 id = 22 и т. Д.)

Мне было интересно, если следующий запрос:

select * from my_table where id IN (1,2,3..) AND id2 IN (11,22,33..)

фактически повредить производительность, хотя это первичный ключ.

Запустит ли один цикл выбора в цикле:

select * from my_table where id = 1 AND id2 = 11
select * from my_table where id = 2 AND id2 = 22

... будет работать быстрее?

Я считаю, чтоответ да, причина для каждого идентификатора, запрос сравнивает id2 со списком целых чисел.Это правильно?Кроме того, имеет ли значение IN первичный ключ для одного столбца?

1 Ответ

0 голосов
/ 14 февраля 2019
  • Если вы проверяете «большинство» значений, то, вероятно, самый быстрый запрос - один запрос, выполняющий сканирование таблицы.
  • Если предложения IN довольно короткие, оптимизатор может очень эффективно пролистывать таблицу.
  • Если таблица огромна, а значения разбросаны и нужны обращения к диску, она может быть медленной независимо.
  • Грубо говоря, 10 1-row SELECTs по своей сути занимает столько времени, сколько один SELECT извлекает 100 строк.(Это предполагает отсутствие операций ввода-вывода и хороших индексов.) Итак, вам нужно отчаянно делать одиночные выборки.

Другими словами, вы тестируете его с помощью ваши данные и ваши IN списки.Мы не можем дать вам простой ответ.Но будьте осторожны: по мере роста таблицы и / или изменения списков IN производительность может изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...