回答

收藏

年龄[1、2、3]与1和3之间的年龄

技术问答 技术问答 471 人阅读 | 0 人回复 | 2023-09-14

我有一个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由于测试范围较小,因此可以更容易地排除不必要的结果。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则