前言: 以下的答案是假设你使用SQL Server 2008中如果你没有,那么它很可能是使用NOT运算符时,数据库技术问题,不支持索引。所以,如果你使用SQL Server 2008 ...
你的DBA不知道他在说什么。
以下语法
NOT (SomeTableAlias.SomeTableColumn = 1)
将绝对由SQL Server查询分析器的理解。我有NHibernate的查询,看起来像上面的语法,他们确实使用正确的索引。
并回答你的问题,没有。 NHibernate在为你创建SQL时总是使用参数。参数化查询是非常常见的地方,即使您自己使用传统的ADO.NET。
让NHibernate不使用参数的唯一方法是如果您使用session.CreateSQLQuery()方法提供它需要执行的SQL。
无论如何,上述行,你贴:
Where(x => x.Rated == false) This creates sql that looks like: [email protected] order by cdrcalltmp0_.Created asc'
是完全有效的。当SQL Server收到参数化查询时,它将使用您的“额定”列中的任何索引。
如果您的DBA仍然怀疑您,请告诉他在Sql Server Management Studio中运行带有“显示估计执行计划”功能的查询。这将证明查询正在使用索引。
“由于参数,这不起作用。”为什么不工作? – Jaguar 2012-08-10 10:03:58
同意,什么概率与“这是因为参数不起作用。” – Chev 2012-08-10 11:27:29
对不起,我不知道为什么索引不能使用参数。我猜应该。 – Anders 2012-08-10 13:19:23