我有一张桌子
Books(BookId, Name, ...... , PublishedYear)
我的Books
表中有大约30个字段,其中BookId
是主键(标识列)。我有大约200万张这张桌子的记录。
我知道select *
是邪恶的表演杀手..
我有条件选择行范围或所有行中包含所有列的行。
Select * from Books;
此查询需要2秒多的时间来扫描数据页并获取所有记录。在检查执行时,它仍然使用聚集索引扫描。
显然2秒我不是那么糟糕,但是当这个表必须与其他表连接时,这些表是批量执行的,花费时间超过15分钟(尽管最终结果没有重复记录,但是是匹配)。连接标准非常简单,不会产生重复。
单独排除此表会在几秒钟内完成批处理执行。
有没有办法优化这个,我说我必须选择所有列:(
提前致谢。
答案 0 :(得分:1)
我只是针对我的开发人员实例运行批处理,一个SELECT指定所有列,一个使用*。除了我的输入的原始解析之外,没有任何证据(也不应该)存在任何差异。如果我没记错的话,那句老话真的意味着:不要选择你没有使用的列,它们会耗尽资源而没有任何好处。
当您尝试提高代码的性能时,请务必检查您的假设,它们可能仅适用于某些旧版本(sql server等)或其他方法。