如何在选择行范围或所有行的所有字段时加速聚簇索引扫描

时间:2015-01-08 12:30:36

标签: sql sql-server sql-server-2008 database-performance

我有一张桌子

Books(BookId, Name, ...... , PublishedYear)

我的Books表中有大约30个字段,其中BookId是主键(标识列)。我有大约200万张这张桌子的记录。

我知道select *是邪恶的表演杀手..

我有条件选择行范围或所有行中包含所有列的行。

Select * from Books; 

此查询需要2秒多的时间来扫描数据页并获取所有记录。在检查执行时,它仍然使用聚集索引扫描。

显然2秒我不是那么糟糕,但是当这个表必须与其他表连接时,这些表是批量执行的,花费时间超过15分钟(尽管最终结果没有重复记录,但是是匹配)。连接标准非常简单,不会产生重复。

单独排除此表会在几秒钟内完成批处理执行。

有没有办法优化这个,我说我必须选择所有列:(

提前致谢。

1 个答案:

答案 0 :(得分:1)

我只是针对我的开发人员实例运行批处理,一个SELECT指定所有列,一个使用*。除了我的输入的原始解析之外,没有任何证据(也不应该)存在任何差异。如果我没记错的话,那句老话真的意味着:不要选择你没有使用的列,它们会耗尽资源而没有任何好处。

当您尝试提高代码的性能时,请务必检查您的假设,它们可能仅适用于某些旧版本(sql server等)或其他方法。