Итак, я писал запрос в Visual Studio 2010 (я имею в виду, что я открыл проводник сервера, щелкнул правой кнопкой мыши по серверу и выбрал New Query). Запрос включает условие
A AND B AND C AND D AND E AND F AND (G OR H)
, которое является конъюнктивной нормальной формой (CNF). Когда я запустил запрос (прикрепленный к MSSQL Server 2008), он изменил текст на
A AND B AND C AND D AND E AND F AND G OR
A AND B AND C AND D AND E AND F AND H
, который является дизъюнктивной нормальной формой (DNF).
Судя по тому немногому, что я нашел в сети, кажется, что DNF позволяет SQL запускать конъюнктивы отдельно и объединять их в конце.
Однако действительно ли DNF дает преимущество перед CNF для чего-то подобного, с таким количеством повторяющихся условий? Если нет, как я могу заставить оптимизатор принять условие как есть? Если да, следует ли мне писать запрос в коде моего приложения в форме CNF, потому что она короче и аккуратнее, или в форме DNF, потому что она экономит время оптимизатора?