MySQL知识总结
《MySQL是怎样运行的》知识总结
14 基于规则的优化
MySQL会基于一些规则重写我们写的语句,使得查询的执行更加高效
表的结构
# 表single_table
CREATE TABLE single_table (
id int not null auto_increment,
key1 VARCHAR(100),
key2 int,
key3 varchar(100),
key_part1 varchar(100),
key_part2 varchar(100),
key_part3 varchar(100),
common_field varchar(100),
primary key (id),
key idx_key1 (key1),
unique key uk_key2 (key2),
key idx_key3 (key3),
key idx_part (key_part1, key_part2, key_part3)
) ENGINE = INNODB
CHARSET = utf8;
# 表t1
create table t1
(
m1 int,
n1 char(1)
);
# 表t2
create table t2
(
m2 int,
n2 char(1)
);
insert into t1
values (1, 'a'),
(2, 'b'),
(3, 'c');
insert into t2
values (2, 'b'),
(3, 'c'),
(4, 'd');
条件化简
我们编写的查询语的搜索条件本质上是条件表达式,这些表达式可能比较复杂,不能高效地执行查询,MySQL优化器会为我们化简这些表达式
。
移除不必要的括号
select *
from t1,
(t2, t3);# 移除不必要的括号
select *
from t1,
t2,
t3;
常量传递
某个表达式是某个列与常量的等值匹配
select *
from single_table
where key1 = 'a'
and key3 > key1;
select *
from single_table
where key1 = 'a'
and key3 > 'a';# 常量传递
移除没有用的条件
移除明显永远为true、false的表达式