SQL在WHERE子句中选择IN与LIKE

时间:2011-05-02 00:35:54

标签: sql select where-clause sql-like

哪一个性能更快?

SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 LIKE '%AL'

SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 IN ('AAL', 'IAL')

或它没有任何区别?

5 个答案:

答案 0 :(得分:6)

您的里程可能会有所不同,但第二个应该更快,因为它是两个索引支持的查找,而不是完整的索引扫描。如果没有field5上的索引,则无关紧要(两种情况下都是全表扫描)。

答案 1 :(得分:4)

如果你没有覆盖索引(或至少是field5上的索引),那么两者都需要进行表扫描,因此同样很差。

关于查询...第二个与WHERE field5 = 'AAL' OR field5 = 'IAL'相同,这是要查找的2个精确值(例如,可能是搜索)。 LIKE和领先的通配符暗示“我不知道要寻找多少值”寻求永远不会发生

关于索引...如果你只在field5上有索引,那么第二个可能有2个键查找来获取其余的数据。第一个可能会忽略此索引,因为它有一个前导通配符。所以第二个更好的假设事情就像我期望的那样。

使用覆盖索引,然后第二个再次没有密钥查找

关于搜索参数...如果将IN更改为变量,则计划将再次更改。使用常量的查询比使用变量的查询更快,因为使用常量值可以预先知道。

但是,你试过吗......

答案 2 :(得分:0)

我肯定会在你的平台上进行测试。有些RDBMS在IN逻辑上很可怕,也就是说比你想象的慢很多。 Mysql有这个问题,你没有在你的问题中指定。

答案 3 :(得分:0)

正如其他声明取决于您选择的RDBMS,如果您使用的是MS SQL,则两个语句在性能方面都是相同的

更新:根据 Martin 评论,如果field5没有索引,则上述情况属实,这是问题的原始假设。

答案 4 :(得分:0)

INLIKE命令快......