В случай на INNER JOIN или таблица отляво в LEFT JOIN, в много случаи оптимизаторът ще установи, че е по-добре първо да извърши някакво филтриране (най-висока селективност), преди действително да извърши какъвто и да е тип физическо свързване - така че има очевидно физическият ред на операциите е по-добър.
До известна степен можете понякога да контролирате това (или да пречите на това) с вашия SQL, например с агрегати в подзаявки.
Логическият ред на обработка на ограниченията в заявката може да се трансформира само според известни инвариантни трансформации.
И така:
SELECT *
FROM a
INNER JOIN b
ON a.id = b.id
WHERE a.something = something
AND b.something = something
все още е логически еквивалентен на:
SELECT *
FROM a
INNER JOIN b
ON a.id = b.id
AND a.something = something
AND b.something = something
и като цяло ще имат един и същ план за изпълнение.
От друга страна:
SELECT *
FROM a
LEFT JOIN b
ON a.id = b.id
WHERE a.something = something
AND b.something = something
НЕ е еквивалентно на:
SELECT *
FROM a
LEFT JOIN b
ON a.id = b.id
AND a.something = something
AND b.something = something
и така оптимизаторът няма да ги трансформира в същия план за изпълнение.
Оптимизаторът е много интелигентен и е в състояние да придвижва нещата доста успешно, включително свиване на изгледи и вградени таблично стойностни функции, както и дори да прокарва нещата надолу през определени видове агрегати доста успешно.
Обикновено, когато пишете SQL, той трябва да бъде разбираем, поддържаем и правилен. Що се отнася до ефективността при изпълнение, ако оптимизаторът изпитва затруднения да превърне декларативния SQL в план за изпълнение с приемлива производителност, кодът понякога може да бъде опростен или подходящи индекси или подсказки добавени или разбити на стъпки, които трябва изпълняват по-бързо - всичко в последователни порядки на инвазивност.