所以我在 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)。
从我在网上找到的一点点来看,似乎 DNF 允许 SQL 单独运行连接词并在最后合并它们。
但是,对于这样的事情,有这么多重复的条件,DNF 真的比 CNF 更有优势吗?如果不是,我如何强制优化器按原样接受条件?如果是这样,我应该在我的应用程序代码中以 CNF 形式编写查询,因为它更短更整洁,还是以 DNF 形式编写,因为它可以节省优化器的时间?