两个查询,一个是OR,一个是IN(),是否具有相同的性能?

时间:2012-02-04 12:51:32

标签: sql performance

有2个查询:

select a,b,c,d from test where a=1 or a=2 or a=3

select a,b,c,d from test where a in (1,2,3)

哪一个表现更好?在表中,列a有一个索引。

3 个答案:

答案 0 :(得分:4)

这应该取决于。

正如你在评论中所说,有很多变数。

最好的方法是为每个特定查询运行某种解释计划,并查看特定数据库与加载的特定数据和特定查询之间的差异(如果有)。

风格上,这不是问题,在这些情况下我个人更喜欢IN子句。

答案 1 :(得分:3)

大多数 - 如果不是全部 - 查询优化器会在选择执行计划之前将一个表单重写到另一个表单。所以这两个会有相同的表现。

答案 2 :(得分:1)

一般不会! OR运算符更灵活,可用于评估比IN运算符更多的条件。

虽然使用IN运算符(包含)的任何条件都可以使用OR运算符替换为等效运算符,但另一方面却不是这样:存在大量涉及OR运算符的条件。 t使用IN运算符具有等效条件。

这意味着当使用适当的操作符(IN)而不是更通用的操作符时,可以更好地识别包含物,以便可以有效地阐述它们。