2014-09-14 6 views
1

Вообще говоря, существует ли эмпирическое правило, когда использовать подзапрос и когда использовать внутреннее соединение? Для меня это обычно монета флип, потому что я действительно не понимаю внутренности.Бенчмаркинг INNER JOIN vs SUBSELECT

Когда следует использовать какой?

SELECT item1, item2 FROM table1 
    INNER JOIN table2 on table1.field=table2.field 

Или -

SELECT item1, item2 FROM table1 WHERE field in 
    (SELECT field FROM table2) 
+1

Mysql обрабатывает последние хуже, особенно в старых версиях. Таким образом, правило: 1. предпочитайте 'INNER JOIN' 2. Используйте самую новую версию, которую вы можете себе позволить. – zerkms

+2

Учебный пример, в котором версия' INNER JOIN' заняла всего лишь часть секунды, а подзапрос занял почти 30 минут: [JOIN vs. WHERE: Почему два запроса, которые получают одинаковые результаты, демонстрируют разницу в производительности на 3-4 порядка?] (Http://stackoverflow.com/questions/21723017/join-vs-where-why-do-two-queries-that-obtain- одинаковые-конечные результаты демонстрируют-3-4 ORD) – har07

ответ

2

Я думаю, сопоставимое версия суб-запрос должен быть:

SELECT item1, item2 FROM table1 
WHERE EXISTS (SELECT 1 FROM table2 WHERE table.field = table2.field) 

В РСУБД с сильным оптимизатора запросов они должны быть различимы, так как один может быть автоматически преобразован в другой. По-видимому, MySQL еще не в этой лиге, а JOIN превосходит коррелированные подзапросы.

0

Обычно JOIN и быстрее, чем подзапроса

Когда набор результатов подзапроса является минимальным, подзапрос может быть быстрее.

Также это зависит от оптимизации РСУБД.

Смежные вопросы