MySQL 'OR' и два оператора SELECT имеют одинаковую сложность? - PullRequest
1 голос
/ 29 апреля 2019

1. "SELECT id, name FROM Customers WHERE id = id1 OR id = id2"

2. "SELECT id, name FROM Customers WHERE id = id1" и снова "SELECT id, name FROM Customers WHERE id = id2"

Требуется ли одно и то же время для двух вышеупомянутых случаев в контексте MySQL?ИЛИ Как ИЛИ реализуется внутренне?

РЕДАКТИРОВАТЬ:

Предположим, Customers таблица проиндексирована id столбец

Ответы [ 2 ]

1 голос
/ 02 мая 2019

90% от простого простого выбора - это издержки (сеть, анализ, оптимизация и т. Д.).

id = 123 OR id = 345 оптимизировано до id IN (123, 345).Если на id есть индекс (PRIMARY KEY - это индекс), это 2 зонда в таблице.

Так что, если выборка одной строки - это 100% усилий, то выборка 2 - это примерно 110% от этого (90% накладных расходов, затем 2 единицы реальной работы).

Между тем, 2 отдельных отборов будет составлять 200%.

С другой стороны, еслиу вас есть

WHERE x = 98 OR y = 65

, для этого нет подходящего метода индексации.

План A: Полное сканирование таблицы, проверка x и y для каждой строки.Очень медленно для большого стола.

План Б: Измените его на

( SELECT ... WHERE x = 98 )
UNION
( SELECT ... WHERE y = 65 )

Это будет больше похоже на 200%.То есть выполнение двух запросов помогает в этом случае .

План C - это «объединение слияний индекса», к которому оптимизатор прибегает лишь изредка.

1 голос
/ 29 апреля 2019

Вы должны сформулировать это следующим образом:

SELECT id, name
FROM Customers
WHERE id IN (@id1, @id2);

Если предположить, что id1 и id2 переданы в запрос, то они будут похожи, только если у вас есть индекс на id (которыйразумно).Конечно, выполнение двух запросов влечет за собой накладные расходы на выполнение двух запросов.Тем не менее, сложность одинакова с точки зрения алгоритмического анализа.

Без индекса версия с двумя запросами медленнее в два раза, потому что она должна сканироватьстол дважды.Однако, хотя это медленнее, это не влияет на сложность .

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