Производительность запросов: запрос к нескольким таблицам Vs. Составной запрос

В таблице A есть столбец srno и несколько других столбцов.

В таблице B есть столбцы srno и id.

Я хочу получить srno от B для заданного id, а затем извлечь записи для этого srno из таблицы A.

Например, если id равен 7, я могу сделать это двумя способами:

select * from A as table_a, B as table_b where table_a.srno=table_b.srno and table_b.id=7;

А также,

select * from A where srno in (select srno from B where id=7);

Оба делают то же самое. Но когда в обеих таблицах огромное количество записей, что лучше с точки зрения производительности? Или оба будут иметь одинаковую производительность? (Давайте здесь предположим, что для этих двух таблиц была обеспечена правильная индексация и т. д. Я просто хочу сравнить производительность между этими двумя запросами)


person Atul    schedule 13.07.2015    source источник
comment
Запросы не эквивалентны. Для первого потребуется distinct, или вам нужно гарантировать отсутствие дубликатов, сгенерированных join.   -  person Gordon Linoff    schedule 13.07.2015


Ответы (1)


Ваш второй запрос всегда будет медленнее. Этот тип динамического предложения IN в MySQL никогда не является хорошим подходом.

Я бы рекомендовал использовать первый запрос, но переписать его с использованием синтаксиса соединений ANSI и выбрать минимальный набор необходимых столбцов, а не выполнять SELECT *.

Это было бы хорошей отправной точкой:

select table_a.* 
from A as table_a 
inner join B as table_b on table_a.srno=table_b.srno 
where table_b.id=7;
person Ike Walker    schedule 13.07.2015