Насколько неэффективны виртуальные таблицы JOIN? - PullRequest
5 голосов
/ 30 июля 2011

Скажем, у меня есть такой запрос, в котором я объединяю несколько виртуальных таблиц:

SELECT table1.a, tbl2.a, tbl3.b, tbl4.c, tbl5.a, tbl6.a
FROM table1
JOIN (SELECT x, a, b, c FROM table2 WHERE foo='bar') tbl2 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table3 WHERE foo='bar') tbl3 ON table1.x = tbl3.x
JOIN (SELECT x, a, b, c FROM table4 WHERE foo='bar') tbl4 ON table1.x = tbl2.x
JOIN (SELECT x, a, b, c FROM table5 WHERE foo='bar') tbl5 ON table1.x = tbl5.x
JOIN (SELECT x, a, b, c FROM table6 WHERE foo='bar') tbl6 ON table1.x = tbl6.x
WHERE anotherconstraint='value'

В моем реальном запросе каждое JOIN имеет свои собственные JOIN, агрегатные функции и ограничения WHERE.

Насколько хорошо / плохо будет выполняться такой запрос? Кроме того, какова разница между этим и выполнением всех отдельных виртуальных таблиц в качестве их собственного запроса и связыванием результатов вместе вне SQL

Ответы [ 2 ]

5 голосов
/ 30 июля 2011

Нет ничего плохого в использовании встроенных представлений (что является AFAIK правильным термином для того, что вы называете «виртуальными таблицами»).Я рекомендую научиться просматривать и понимать планы выполнения, чтобы вы могли исследовать конкретные проблемы с производительностью.

В общем, я думаю, что это очень плохая идея - выполнить несколько запросов из одной таблицы, а затем по существу объединить результаты в своемкод переднего плана.Для чего предназначена СУБД, делать пересоединения, зачем ее переписывать?

3 голосов
/ 30 июля 2011

Почему бы просто:

SELECT table1.a, tbl2.a, tbl3.b, tbl4.c, tbl5.a, tbl6.a
FROM table1 JOIN table2 on table1.x = table2.x AND table2.foo = 'bar'
            JOIN table3 on table1.x = table3.x AND table3.foo = 'bar'
            JOIN table4 on table1.x = table4.x AND table4.foo = 'bar'
            JOIN table5 on table1.x = table5.x AND table5.foo = 'bar'
            JOIN table6 on table1.x = table6.x AND table6.foo = 'bar'
WHERE anotherconstraint='value';

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

Насколько хорошо это будет работать?Кто знает?Как утверждает @Vinko, ответ заключается в рассмотрении плана выполнения, возможно, при необходимости предоставляя подсказки.На этот сложный вопрос нельзя ответить, посмотрев на надуманный пример.

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