前言: 以下的答案是假設你使用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