首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能解释一下查询优化吗?为什么它更快,我如何从这个例子中学习?

你能解释一下查询优化吗?为什么它更快,我如何从这个例子中学习?
EN

Stack Overflow用户
提问于 2011-03-01 13:59:03
回答 2查看 145关注 0票数 2

我的一个朋友优化我的查询

我的问题是:

代码语言:javascript
复制
select * from A a
inner join B b
on a.A_ID = b.B_ID
where a.event_ID = ( select event_ID from C where Cval = 1234)

他的版本是:

代码语言:javascript
复制
select * from A a
inner join B b on a.A_ID = b.B_ID
where exists (
    select TOP 1 event_ID
    from C where Cval = 1234 and event_ID = a.event_ID
)

他说它应该更有效率。为什么它会更有效率,在未来,我将如何发现相同/相似的问题,以及我将采取哪些步骤和分析来进行类似的优化?它仅仅是每个有经验的数据库开发人员都认识到的优化技巧之一吗?

我在试着理解他想出的黑魔法。任何建议都是值得感谢的。我使用的是SQL Server 2008。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-01 14:29:42

数据库性能调优的目标是最小化查询的响应时间,并通过最小化网络流量、磁盘I/O和CPU时间来充分利用服务器资源。只有了解数据的逻辑和物理结构,了解服务器上使用的应用程序,以及了解数据库的许多冲突使用可能如何影响数据库性能,才能实现这一目标。

避免性能问题的最好方法是确保性能问题是您正在进行的开发活动的一部分。许多最重要的性能改进都是通过在数据库开发周期开始时仔细设计来实现的。为了最有效地优化性能,您必须确定在最广泛的各种情况下能够带来最大性能提升的领域,并将您的分析重点放在这些领域。

此外,此链接可能会帮助您进行http://beginner-sql-tutorial.com/sql-query-tuning.htm

票数 1
EN

Stack Overflow用户

发布于 2011-03-01 14:58:44

查询是不同的,特别是第二个查询指定:

代码语言:javascript
复制
C.event_ID = a.event_ID

第一个没有的地方。

虽然您的数据上可能存在某些约束,这意味着返回的数据集将是相同的,但在不更多地了解此约束的确切含义/含义的情况下,无法预测此更改对查询的影响。

除此之外,在没有执行计划的情况下(充其量)很难预测任何查询的效果。如果您想要了解这两个查询之间的区别,您需要来获取针对代表性数据运行的查询的执行计划。(Google包含了大量关于如何获取和解释执行计划的信息和文章)

琐事:当我将这个查询转换为在我的数据库中的表上运行的查询时,第二个查询的运行速度变慢了(不是很明显,但肯定是变慢了)。但是,在您的数据库上,您可能会得到完全不同的结果。

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

https://stackoverflow.com/questions/5151038

复制
相关文章

相似问题

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