我在數據庫表上運行sp_executesql時遇到了一些問題。我正在使用一個ORM(NHibernate)生成SQL查詢,在這種情況下查詢一個表。這個表格中有大約700萬條記錄,並且索引很高。sp_executesql導致我的查詢很慢
當我運行查詢ORM吐出沒有sp_executesql時,它運行速度非常快,profiler顯示它有85個讀取。當我使用sp_executesql運行相同的查詢時,它有大約201,828個讀取。
有沒有什麼我需要做我的SQL Server來提高沒有sp_exectuesql運行查詢的性能?它好像它不使用我的索引。
解決此問題的最佳方法是什麼?如果可能的話,我寧願不改變ORM生成SQL的方式,而是在SQL Server /數據庫級別修復問題,因爲它似乎是問題所在。我猜我需要做更多的數據庫優化來解決這個問題,我只是不知道該怎麼做。
exec sp_executesql N'SELECT top 20
this_.Id as Id0_0_,
this_.Application as Applicat2_0_0_,
this_.[Context] as column3_0_0_,
this_.Logger as Logger0_0_,
this_.Message as Message0_0_,
this_.Exception as Exception0_0_,
this_.Thread as Thread0_0_,
this_.[Level] as column8_0_0_,
this_.LogDate as LogDate0_0_,
this_.SessionId as SessionId0_0_
FROM LogMessages this_
WHERE this_.[Context] = @p0',
N'@p0 nvarchar(2)',
@p0 = N'55'
上下文是一個varchar(255)。這個字段是非常自由的形式。它並不總是一個整數,長度可能非常。在這種情況下,我查詢了「55」的值,但它可以很容易地查詢「Foooooobaaaarrr」
什麼版本的SQL Server?查詢是什麼樣的? – 2010-09-10 20:18:24
沒有看到我們只能猜到的任何代碼 – SQLMenace 2010-09-10 20:21:14
SQL Server 2008 – Rob 2010-09-10 20:25:19