Итак, я писал запрос в Visual Studio 2010 (я имею в виду, что я открыл проводник сервера, щелкнул правой кнопкой мыши сервер и выбрал «Новый запрос»). В запросе есть условие
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 позволяет SQL запускать конъюнктивы отдельно и объединять их в конце.
Однако для чего-то подобного, с таким количеством повторяющихся условий, действительно ли DNF дает преимущество перед CNF? Если это не так, как я могу заставить оптимизатор принять условие как есть? Если это так, должен ли я написать запрос в коде моего приложения в форме CNF, потому что он короче и аккуратнее, или в форме DNF, потому что это экономит время для оптимизатора?