哪一个性能更快?
SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 LIKE '%AL'
与
SELECT field1, field2, field3, field4
FROM MyTable
WHERE field5 IN ('AAL', 'IAL')
或它没有任何区别?
答案 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)
IN
比LIKE
命令快......