问题的假设:
的值,这两个查询将只返回一行
问题:
哪个查询更快,哪个查询更好?:
SELECT * FROM my_table WHERE X = 'some value' AND Y = 'other value';或
SELECT * FROM my_table WHERE X = 'some value';基本上,将额外的不需要的参数传递到查询中会带来好处还是损失(从性能上讲),如果“效益”是答案,那么这是一种“好的”实践吗?
发布于 2010-11-02 20:16:42
显然,具有更多参数的查询需要做更多的工作,但我认为您会发现在大多数情况下,这种差异将是微不足道的,使之成为一个毫无意义的问题。
最佳实践是以这样一种方式编写查询,以解决您的业务问题,并让芯片随心所欲。如果您显然知道一个参数是多余的,那么就关闭它,如果没有其他原因,只是为了简化代码。但是,由于数据的当前状态,我不会花很多时间去寻找参数是多余的情况。
发布于 2010-11-02 20:06:15
关于性能,如果您的表被正确地索引了,那么就不应该有明显的差别。
如果列X有索引,则两个查询都是快速的。如果没有索引,则两个查询的速度都不会那么快,但速度相似(假设大多数行都失败--只有一个条件会被计算)。如果Y列被索引,而不是X,则第二个查询将更快,因为它是唯一可以在Y列上使用索引的查询。
需要注意的一点是,如果X和Y的值不是您所期望的,那么这两个查询可能会给出不同的结果。在第一种情况下,它将返回行,即使Y的值与您预期的值不同。在第二种情况下,行将完全不被返回。您应该考虑在此错误情况下想要发生什么,并根据该决定选择查询。如果您想要显示一个错误Expected value 'foo' for Y but found 'bar',那么您将需要获取该行,这样第一个查询就更合适了。
发布于 2010-11-02 20:17:32
与其他答案一样,假设索引放置正确,更好的做法是非常具体地说明您想要的内容。您现在可以依赖于结果的数量,但是在一个不断发展的项目中考虑,并确保随着更改您的查询将保持尽可能精确。
https://stackoverflow.com/questions/4081645
复制相似问题