我有一些列包括列datekey
(這是一個date
和具有索引)的表MYTABLE,列contents
其是varbinary(max)
和列stringhash
其是varchar(100)
。 stringhash
和datekey
一起組成表格的主鍵。一切都在我的本地機器上運行。添加數據長度條件使得查詢慢
運行
SELECT TOP 1 * FROM mytable where datekey='2012-12-05'
返回0行和取0秒。 但是,如果我添加datalength
條件:
SELECT TOP 1 * FROM mytable where datekey='2012-12-05' and datalength(contents)=0
它運行了很長一段時間,我才放棄等待不返回任何東西。我的問題: 爲什麼?我如何知道爲什麼需要這麼長時間?
這是我檢查迄今:
當我點擊「顯示估計的執行計劃」還需要很長的時間,我才放棄等待不返回任何東西。
如果我做
SELECT TOP 1000 datalength(contents) FROM mytable order by datalength(contents) desc
需要7秒,返回一個列表4228081,4218689等
exec sp_spaceused 'mytable'
回報
rows reserved data index_size unused
564019 50755752 KB 50705672 KB 42928 KB 7152 KB
所以該表是在50相當大GB。 跑步
SELECT TOP 1000 * FROM mytable
需要26秒。
sqlservr.exe進程大約是6 GB,這是我爲數據庫設置的限制。