Оптимизация SQL и дизъюнктивная нормальная форма

Итак, я писал запрос в 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, потому что она экономит время оптимизатора?

6
задан Dan D. 25 July 2011 в 16:39
поделиться