【发布时间】:2012-12-06 11:14:25
【问题描述】:
我有一个 mytable 表,其中包含一些列,包括 datekey 列(这是一个 date 并有一个索引)、一个列 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,这是我为数据库设置的限制。
【问题讨论】:
标签: sql-server performance sql-server-2012 datalength