首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询中冗余的where谓词是否会影响性能?

SQL查询中冗余的where谓词是否会影响性能?
EN

Stack Overflow用户
提问于 2011-06-06 23:52:41
回答 2查看 756关注 0票数 5

考虑如下查询:

代码语言:javascript
运行
复制
select *
from t
where a = 5 and (a = 5 and b = 7)

冗余谓词a = 5是否会影响查询的性能。我不相信,但有人告诉我并非如此(是的,我知道这取决于数据库管理系统,但假设它是一些企业级的数据库管理系统,如SQL Server、DB2或Oracle)。

EN

回答 2

Stack Overflow用户

发布于 2011-06-06 23:58:29

答案通常是否定的,冗余子句不会影响性能。当然,作为一名程序员,你可以使用证据来证明这一点或另一种方式(不像那些会重复他们的神话作为事实的人)。

只需打开您选择的数据库,输入带冗余子句和不带冗余子句的查询,然后要求数据库对这两个查询执行explain操作。

例如,在SQL Server Management Studio (MS SQL Server)中,打开一个查询窗口,输入您的查询,然后右键单击并选择“显示估计的执行计划”(或者您可以选择一个选项,以便在运行查询后显示实际计划)。

票数 5
EN

Stack Overflow用户

发布于 2011-06-14 15:16:44

我想引用The Law of Leaky Abstractions by Joel Spolsky的以下内容

SQL语言旨在抽象出查询数据库所需的过程步骤,而不是只允许您定义所需的内容,并让数据库找出查询它所需的过程步骤。但在某些情况下,某些SQL查询比其他逻辑等价查询慢数千倍。一个著名的例子是,即使结果集相同,指定"where a=b b=c a=c“比只指定"where a=b和b=c”要快得多。您不应该关心过程,只需要关心规范。但有时抽象会泄漏并导致糟糕的性能,您必须打开查询计划分析器,研究它做错了什么,并找出如何让您的查询运行得更快。

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

https://stackoverflow.com/questions/6254648

复制
相关文章

相似问题

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