我有一个InnoDB表和一个age列索引,就像这样# c$ b( d5 G; s9 ]% A9 f9 M
CREATE TABLE Person ( .... age int(11) not null; key (age); .... ) engine=InnoDB;我只想知道这些查询背后的真实情况:) _2 _- y7 R! @5 n& K
SELECT * FROM Person WHERE age IN [1,2,3];和 & }1 W. Z+ W; P, W2 |1 hSELECT * FROM Person WHERE age BETWEEN 1 AND 3;据我所知,第一个MySQL将使用列寿命索引,而第二个则不能使用。是吗?性能哪个更好?& v/ ?! J0 ~. Q9 y" j
7 u2 x" _- b. p3 A( u+ o; ` 解决方案: / t3 W* e2 A/ [: O- J8 Q5 R, R
这两个查询都将使用索引。+ U- q. l- k( M( p; Y
查询A将转换为:- B# y: p& m u" M2 f
select * from person where age = 1 or age = 2 or age 3;查询B将转换为, t4 R8 ~8 T& ~. ~5 Y5 b+ D
select * from person where age >= 1 and age 因此查询A将使用OR三个测试。 : m+ Q8 x4 z0 _: f查询B将使用AND两次测试。 % u2 h3 J& ?0 H# T4 N查询B更快。 / x* z7 k4 ^4 F' u. j2 @; R通常,使用AND查询比使用查询快OR。 - L5 q) X* O s另外,查询B由于测试范围较小,因此可以更容易地排除不必要的结果。