【发布时间】:2014-05-29 04:02:45
【问题描述】:
我在这里遇到了一个奇怪的情况。 我有一个复杂的查询,大约需要 10 秒才能从数据库中检索大约 6000 行。
查询版本 1:
SELECT * from .....
在上述版本中,从数据库中获取 6000 行大约需要 10 秒(我说的是在 SQL 管理工作室中运行查询)
查询版本 2:
SELECT [FieldName1], [FieldName2] from .....
在上面的版本(2)中,从数据库中获取结果(6000行)需要一个多小时甚至更长的时间(我说的是在SQL管理工作室中运行查询)
两个查询具有相同的连接和 where 条件。
有人能解释一下吗?
谢谢。
问候, 纳扬
【问题讨论】:
-
我不知道 sql-server,但我假设您可以通过某种方式检查查询计划。这两者的计划有区别吗?
-
您可能想看看这个问题的公认答案:stackoverflow.com/questions/3180375/select-vs-select-column
-
是的。从做基线工作开始,为我们提供两种场景的 ESTIMATED 和 EXECUTED 查询计划。
-
我也观察到了这一点(许多版本的 SQLServer 引擎都回来了)。
-
我认为对于“select *”SQL 在查询计划的某处使用全表扫描,对于“选择少数字段”它会尝试使用索引并以某种方式搞砸查询计划;慢速磁盘子系统可能“有帮助”。有时,相关表的(完整)统计信息更新会有所帮助。就像许多其他人所说的那样,看看查询计划。
标签: sql sql-server tsql