简单选择,返回1400行,需要360ms?

时间:2014-07-13 01:21:23

标签: sql sql-server-2008

我有一个返回1400行的查询。

这是基本的。

SELECT * FROM dbo.entity_event ee

平均耗时250到380毫秒,平均为360毫秒。我希望这会更快。我在笔记本电脑上运行它,但是i7,8gb,SSD。这看起来是否正常,还是应该更快?该表仅包含总结果集。没有Where子句。

运行:

SELECT * FROM dbo.entity_event ee WHERE entity_event_type_id = 1

需要同时。

表中的主键(id)上有一个聚簇索引。

该表有大约15列。主要是日期,整数和小数(16,2)。

如果看起来很慢,我可以看一下如何改善这一点?我确实希望随着系统的使用,该表变得相当大。

我无法在我的实际网站上跟踪此信息,因为主机不允许SQL配置文件连接(权限)。我只能查看我的开发机器。虽然现场直播似乎并不快。

问题源自我拥有的VIEW,平均需要643毫秒。它有8个连接表,其中4个是OUTER连接,排除了索引视图的选项。

但是,视图确实使用列名,包括其他逻辑(CASE ... ISNULL等)。

编辑:我注意到SELECT TOP 10 ...需要1ms。 SELECT TOP 500 ..需要161ms ......所以,它确实看起来像liniar,并且与数据量有关。我想知道这是否可以改善?

执行计划:

enter image description here

1 个答案:

答案 0 :(得分:0)

这看起来很正常,因为无论WHERE子句如何,它都会进行全扫描 - 因为entity_event_type_id不是你的PK也不是索引的。因此,放入WHERE子句无济于事,因为它没有编入索引。

执行前N个会有所帮助,因为它知道它不需要扫描整个聚集的pk索引。

所以...是的,它可以改进 - 如果你索引entity_event_type_id,你会期望使用WHERE子句的时间更快。但是一如既往......索引它只有你真的会在WHERE子句中经常使用那个字段。 --Jim