MySQL索引

2019-08-13  本文已影响0人  zxhChex

普通索引
普通索引仅有一个功能:加速查询

create table t10(
id int auto_increment primary key,
name varchar(32),
email varchar(64),
index ix_name(name)
/添加索引到列名 name, 索引名为 ix_name/
);

create index ix_name on t10(name);
单独创建索引
show index from t10\G
查看索引
drop index ix_name on t10;
删除索引ix_name

唯一索引
加速查询 和 唯一约束(可含null)
create table t2(
id int not null auto_increment primary key,
name varchar(32),
email varchar(64),
unique index ix_name (name)
);

create unique index 索引名 on 表名(列名);
创建唯一索引
ALTER TABLE 表名 DROP INDEX 索引名;
删除唯一索引

主键索引
主键有两个功能:加速查询 和 唯一约束(不可含null)
当一个列被创建为主键是,它就会被赋予主机索引的属性。

联合索引
联合索引是将n个列联合成一个索引
其应用场景为:频繁的同时使用 n 个列来进行查询,如:where name = 'shark' and age = 18。
create table studens(
id int not null auto_increment primary key,
name varchar(32) not null,
age int not null,
)

create index idx_name_age on students(name,age);
如上创建联合索引之后,查询时可以这么用:

name and age -- 使用索引 where name='shark' and age=18;
name -- 使用索引 where name='shark';
where 自己的第一个条件的列名必须是组合索引列的最左边的那个.

explain select * from test_data where name='55157'\G


没有索引的sql执行计划 创建索引后的sql执行计划

索引过多的缺点
增加写的压力
增加 MySQL 查询优化器的选择时间。

上一篇下一篇

猜你喜欢

热点阅读