Имате погрешното схващане, че оптимизаторът пренаписва SQL израза. Това не е така. Пренаписването на заявката е работа на преписвача на заявки , който например замества изгледите с тяхната дефиниция. Оптимизаторът предлага последователност от стъпки за изпълнение, за да изчисли резултата. Той създава план , а не SQL оператор.
Оптимизаторът планира две алтернативи:или изпълнение на подплан 1 за всеки намерен ред, или изпълнение на подплан 2 веднъж (обърнете внимание, че той е независим от a
), изградете хеш таблица от резултата и проучете този хеш за всеки ред, намерен в a
.
По време на изпълнение PostgreSQL решава да използва последната стратегия, поради което подплан 1 никога не се изпълнява.