Tru*_* Ha 3 mysql sql database
我有一个InnoDB表和age列上的索引就像这样
CREATE TABLE Person (
....
age int(11) not null;
key (age);
....
) engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)
我只是想知道这些查询背后的真实情况:
SELECT * FROM Person WHERE age IN [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
和
SELECT * FROM Person WHERE age BETWEEN 1 AND 3;
Run Code Online (Sandbox Code Playgroud)
正如我所学到的,第一个MySQL将使用列年龄的索引,而第二个不能使用.是吗?哪个性能更好?
两个查询都将使用索引.
查询A将转换为:
select * from person where age = 1 or age = 2 or age 3;
Run Code Online (Sandbox Code Playgroud)
查询B将转换为
select * from person where age >= 1 and age <= 3;
Run Code Online (Sandbox Code Playgroud)
因此查询A将使用OR进行3次测试.
查询B将使用AND进行2次测试.
查询B更快.
通常,使用AND查询比使用查询更快OR.
此外,查询B正在进行更少的测试,并且因为它正在测试范围,所以它可以更轻松地排除它不想要的结果.