首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库查询优化问题

数据库查询优化问题
EN

Stack Overflow用户
提问于 2010-11-02 20:03:29
回答 5查看 409关注 0票数 1

问题的假设:

  1. 数据库无关的
  2. ,由于X和Y

的值,这两个查询将只返回一行

问题:

哪个查询更快,哪个查询更好?:

代码语言:javascript
复制
SELECT * FROM my_table WHERE X = 'some value' AND Y = 'other value';

代码语言:javascript
复制
SELECT * FROM my_table WHERE X = 'some value';

基本上,将额外的不需要的参数传递到查询中会带来好处还是损失(从性能上讲),如果“效益”是答案,那么这是一种“好的”实践吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-02 20:16:42

显然,具有更多参数的查询需要做更多的工作,但我认为您会发现在大多数情况下,这种差异将是微不足道的,使之成为一个毫无意义的问题。

最佳实践是以这样一种方式编写查询,以解决您的业务问题,并让芯片随心所欲。如果您显然知道一个参数是多余的,那么就关闭它,如果没有其他原因,只是为了简化代码。但是,由于数据的当前状态,我不会花很多时间去寻找参数是多余的情况。

票数 4
EN

Stack Overflow用户

发布于 2010-11-02 20:06:15

关于性能,如果您的表被正确地索引了,那么就不应该有明显的差别。

如果列X有索引,则两个查询都是快速的。如果没有索引,则两个查询的速度都不会那么快,但速度相似(假设大多数行都失败--只有一个条件会被计算)。如果Y列被索引,而不是X,则第二个查询将更快,因为它是唯一可以在Y列上使用索引的查询。

需要注意的一点是,如果X和Y的值不是您所期望的,那么这两个查询可能会给出不同的结果。在第一种情况下,它将返回行,即使Y的值与您预期的值不同。在第二种情况下,行将完全不被返回。您应该考虑在此错误情况下想要发生什么,并根据该决定选择查询。如果您想要显示一个错误Expected value 'foo' for Y but found 'bar',那么您将需要获取该行,这样第一个查询就更合适了。

票数 1
EN

Stack Overflow用户

发布于 2010-11-02 20:17:32

与其他答案一样,假设索引放置正确,更好的做法是非常具体地说明您想要的内容。您现在可以依赖于结果的数量,但是在一个不断发展的项目中考虑,并确保随着更改您的查询将保持尽可能精确。

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

https://stackoverflow.com/questions/4081645

复制
相关文章

相似问题

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