Влияет ли расположение / порядок таблиц в предложении FROM на улучшение производительности? - PullRequest
5 голосов
/ 04 января 2011

В целом, имеет ли какое-либо значение расположение или порядок таблиц в предложении FROM для повышения производительности запроса?Под договоренностью я подразумеваю наименьшую таблицу и самую большую таблицу.

Любой другой опыт / идеи / мнения / факторы также приветствуются.

В моем случае мы используем PostgreSQL v8.2.3.

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Для внутренних объединений это не должно иметь никакого значения - оптимизатор будет генерировать планы, выполняющие объединения в максимально возможном количестве различных заказов (вплоть до таблиц geqo_threshold в от предложение).

Внешние объединения не являются симметричными, поэтому порядок в выражении является значительным (хотя фактический порядок выполнения по-прежнему определяется сервером).

2 голосов
/ 04 января 2011

Вы используете что-то вроде «ВЫБРАТЬ ИЗ таблицы1, таблицы2»?Таблицы «неявно» перекрестно соединены, поэтому я не думаю, что это имеет значение.

Первое, что я хотел бы сделать, это протестировать два возможных запроса, используя EXPLAIN, и посмотреть, есть ли разница?

0 голосов
/ 04 января 2011

Если вы напишите FROM foo, bar, baz, то нет, это не имеет значения. Если вы напишите FROM foo JOIN bar ... JOIN baz ... (внутренние объединения), то это не будет иметь значения, если у вас меньше join_collapse_limit элементов; в противном случае порядок соединения фиксирован, который можно использовать для ручной оптимизации таких вещей (но это редко требуется). Для внешних объединений порядок объединения фиксируется в том виде, в котором он написан, поскольку это влияет на результаты.

0 голосов
/ 04 января 2011

(общий совет SQL, а не специфичный для Postgre)

Это не должно иметь значение - оптимизатор должен строить план на основе имеющейся у него информации, а SQL обычно разрабатывался так, чтобы оптимизатор мог свободно изменять порядок соединений, проверки условий и т. д. при условии, что результат один и тот же.

Может случиться так, что конкретный запрос вызывает проблемы для определенного оптимизатора (для определенной БД, состояния сервера, версии продукта и т. Д.), Но такая ситуация встречается редко.

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