Какой из двух запросов лучше использовать для повышения производительности? - PullRequest
1 голос
/ 10 июля 2019

У меня есть два запроса, чтобы сделать работу

запрос 1:

SELECT * FROM table1 where id = 1
UNION ALL
SELECT * FROM table2 where id = 5
UNION ALL
SELECT * FROM table1 where id = 70
UNION ALL
SELECT * FROM table2 where id = 3
UNION ALL
SELECT * FROM table1 where id = 90

и запрос 2:

SELECT * FROM table1 where id IN (1,70,90)
UNION ALL
SELECT * FROM table2 where id IN (5,3)

Какой из этих двух запросов быстрее?

Если ваш ответ - второй запрос.

Я использовал Query 1 во многих разных местах. в проекте Разница настолько велика, что я бы везде заменил вторым запросом?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вторая версия более краткая и должна быть быстрее, потому что она требует только выполнения двух запросов, в отличие от первой версии, которая выполняет отдельный запрос для каждого значения id.

Предполагаяid будет первичным ключом в обеих таблицах, тогда MySQL также сможет использовать кластерный индекс для более быстрого поиска совпадающих записей.

0 голосов
/ 12 июля 2019

Каковы типичные показатели? Всего 5 рядов? 2 таблицы? Я бы предсказал разницу в производительности как фактор строк / таблиц в пользу 2-й (более короткой) формулировки. В экспериментах я получил около 2х.

Итак, если у вас есть 100 строк из 2 таблиц, вторая формулировка будет значительно быстрее; достаточно быстрее, чтобы стоить усилий.

Почему?

  • Для таких простых запросов анализ и оптимизация доминируют во времени.
  • Для более новых версий MySQL оба запроса будут касаться одинакового количества строк.
  • Для MySQL 5.7.3 и новее временная таблица не потребуется ни для UNION ALL.

Имеет ли значение, что выходные строки могут быть в другом порядке?

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