首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有些列会减慢查询速度

为什么有些列会减慢查询速度
EN

Stack Overflow用户
提问于 2013-01-23 07:27:16
回答 3查看 6.8K关注 0票数 2

我正在使用SQL Server 2012。

我正在尝试优化一个查询,如下所示:

代码语言:javascript
复制
SELECT TOP 20 ta.id, 
              ta.name, 
              ta.amt, 
              tb.id, 
              tb.name, 
              tc.name, 
              tc.id, 
              tc.descr 
FROM   a ta 
       INNER JOIN b tb 
               ON ta.id = tb.id 
       INNER JOIN c tc 
               ON tb.id = tc.id 
ORDER  BY ta.mytime DESC 

查询大约需要5-6秒才能运行。joins中使用的所有列都有索引。这些表有500k条记录。

我的问题是:当我从select中删除列tc.name、tc.id和tc.descr时,查询在不到一秒的时间内返回结果。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-12 02:50:15

我终于能够通过向表中添加额外的索引来调优查询。SQL server没有显示/暗示缺少索引,但是我通过在select中存在的字段上创建一个新的非聚集索引来解决这个问题。

感谢你们站出来寻求帮助。

@Wade链接对理解SQL优化器非常有帮助

票数 0
EN

Stack Overflow用户

发布于 2013-01-23 08:22:27

你需要发布执行计划,才能真正了解其中的区别。

据我所知,SQL Server不会优化外部连接。毕竟,即使select列表中没有列,连接仍然可以用于过滤和乘以行数。

但是,可能会跳过一个步骤。使用select中的变量,引擎需要访问索引并获取包含数据的页面。如果没有这些变量,引擎就不需要执行获取操作。这可能会巧妙地将优化器的平衡从一种连接类型倾斜到另一种类型。

第二种可能只是涉及到时间问题。如果只运行一次查询,那么机器上的页面缓存可能会被填满。第二次运行时,查询速度要快得多,因为数据在内存中。永远不要运行计时,除非您(1)清除每次调用之间的缓存,或者(2)确保缓存被同等填充。

票数 0
EN

Stack Overflow用户

发布于 2013-01-23 12:51:01

你有聚集索引吗?如果不是,则应创建聚集索引并运行查询integer且主要针对主键列。

检查聚集索引的http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14469921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档