2014-02-20 5 views
0

У меня есть MySQL JOIN, состоящие 4 таблицы:Разницы между прямым LEFT JOIN цепи и ВЫБРАТЬ ЛЕВЫЙ подзапрос РЕГИСТРИРУЙТЕСЬ

Прямых цепочки

SELECT col1, col2, col3... col12 FROM 
    (((tbl1 LEFT JOIN tbl2...) LEFT JOIN tbl3 ...) LEFT JOIN tbl4); 

Sub-SELECT

(SELECT col10 .. col12 FROM 
    (SELECT col7 .. col9 FROM 
    (SELECT col1, ... col6 FROM tbl1 
      LEFT JOIN tbl2) AS J1 
      LEFT JOIN tbl3) AS J2 
       LEFT JOIN tbl4...) 

Is существует ли разница в эффективности между этими двумя методами? Чувство моего чувства заключается в том, что подвыборки отбрасывают ненужные строки и столбцы с помощью предложения SELECT ... WHERE и делает JOINs более быстрыми и менее интенсивными в памяти. Любой совет? Как насчет других баз данных?

ответ

0

Это зависит от размера ваших таблиц и отфильтрованных данных по запросам.

Условие1: Если ваш размер стола нормальный (предположим, что все таблицы имеют около 5000 строк), и вы извлекаете данные из таблиц без какой-либо фильтрации, то не должно быть разницы в обоих запросах, даже первый запрос может дать лучшую производительность ,

Условие2: Если в ваших таблицах имеются громоздкие данные, предположим, что строки находятся в миллиардах, но после фильтрации данных фактический набор данных предположительно около ок. ниже 100 строк, тогда второй запрос может быть лучше.

Нет жесткого и быстрого правила, вы должны проверить свою эффективность запросов по-разному в соответствии с размером данных вашего стола и вашим требованием. Правило большого пальца заключается в том, что мы можем уменьшить размер данных для соединений с разными таблицами, тогда это увеличит производительность.

0

это будет зависеть от размера таблицы, как правило, ваш первый запрос будет быстрее, чем второй, потому что период оценки будет меньше по сравнению со вторым.