Я работаю в oracle.Заказ нескольких внутренних соединений в запросе для повышения производительности на основе того, где статья Oracle
У меня есть более двух таблиц для выполнения внутреннего соединения. И, по моему мнению, их порядок имеет значение для выполнения запросов.
Ниже приведен запрос:
select * from
FROM A a
INNER JOIN B b
ON a.b_ID=b.id
INNER JOIN C c
ON c.id=a.c_Id
INNER JOIN D d
ON a.d_ID=d.id
INNER JOIN E e
ON e.d_id =d.id
where e.name='abc' AND e.company_name='xyz';
В моем случае я не требую полного сканирования таблицы таблиц A, B, C, D.
Я хочу, чтобы применить предикат фильтр name
и company_name
, а затем применить внутреннее объединение таблиц A, B, C, D (в плане выполнения).
Мой вопрос: возможно ли это?
Кроме того, если я изменю порядок внутреннего соединения на основе предложения final where, это может повысить производительность (например, запрос ниже)?
select * from
E e INNER JOIN D d
ON e.d_id =d.id
INNER JOIN A a
ON a.d_ID=d.id
INNER JOIN B b
ON a.b_ID=b.id
INNER JOIN C c
ON c.id=a.c_Id
where e.name='abc' AND e.company_name='xyz';
Даже после применения этого изменения я обнаружил, что в некоторых средах DB план выполнения одинаковый для двух запросов.
Есть ли способ, которым я могу заказать шаги плана выполнения во время выполнения запроса, например, явно указывая порядок внутреннего соединения?
Благодаря
Лучше всего: запустите te advisory, примите лучший план и сравните себя, заказ не помог, а использование подсказок в долгосрочной перспективе показало, что перфомансы, как правило, снова будут страдать (их проблема в том, что они привязаны к коду , в то время как рекомендация не является) – Gar
Являются ли статистика таблицы актуальной для всех таблиц? –
И есть ли у вас все индексы, которые вы думаете во всех средах, особенно на столбцах внешнего ключа? –