Я настраиваю запрос для большой транзакционной финансовой системы. Я заметил, что включение условия соединения в предложение where , а также предложение from делает запрос выполняемым значительно быстрее, чем любой из двух в отдельности. Я отмечаю, что соединение в предложении from имеет более одного условия; Я упоминаю об этом, если это важно. Вот упрощенный пример: Добавление условия соединения в предложении from и * where делает запрос быстрее. Зачем?
SELECT *
FROM employee e
INNER JOIN car c ON c.id = e.car_id AND -- some other join
-- Adding the join above again, in the where clause makes the query faster
WHERE c.id = e.car_id;
Я думал ANSI против старой школы была чисто синтаксической. Что происходит?
Update
Проанализировав два плана выполнения, то ясно, что добавление такой же присоединиться к ИНЕКЕ как из пункта, производит совершенно иной план исполнения, чем имея присоединиться к любой из двух.
Сравнивая планы, я мог видеть, что план с дополнительным условием, где условие условия делалось лучше, и задавался вопросом, почему тот, у кого нет, соединяется так, как это было. Зная оптимальный план, быстрая настройка условий соединения разрешила вопросы, хотя я все еще удивляюсь, что оба запроса не скомпилировались в одно и то же. Черная магия.
Было бы интересно увидеть планы объяснений; можете ли вы опубликовать их? Кроме того, какая версия Oracle? – Aleksej
Да, это довольно интересно. Для SQL Server это чисто семантическое. –
@Aleksej Боюсь, я не могу, я буду нарушать политику безопасности на работе. Спасибо за вашу помощь! –