数据库运维
记录DBA学习成长历程

MySQL索引管理命令

什么时候创建索引

按照业务语句的需求创建合适的需求看。并不是将所有列都建立索引。不是索引越多越好。
将索引建立在,经常where group by order by join on ....的条件。
为什么不能乱建索引?
1.如果冗余索引过多,表的数据变化的时候,很有可能会导致索引频繁更新。会阻塞很多正常的业务更新的请求。
2.索引过多会导致优化器选择出现偏差

索引管理命令

查询索引

desc city;

Field :列名字
key :有没有索引,索引类型(PRI: 主键索引,UNI: 唯一索引,MUL: 辅助索引(单列,联和,前缀))

详细查询索引情况

show index from city;


创建单列辅助索引

不要在一个列上建多个索引。同一个表中,索引名不能同名。
select * from where name="wuhan";
alter table city add index idx_name(name);
或者
create index idx_name1 on city(name);

创建联合索引

alter table city add index index_di_po(district,population);

前缀索引

数字列不能用作前缀索引,只能用作字符串。
alter table city add index idx_di(district(5));

删除索引

alter table city drop index idx_name;

唯一索引

列值不能重复,既是索引又是约束,建议建表时候创建
alter table city add unique index idx_uni1(name);
企业应用:表的数据清洗,把冗余数据去掉,冗余数据也会影响多表连接查询

查询是否走索引

举例:找到world下,city表中 name列有重复值的行

select name,count(id) 
from city 
group by name 
having count(id)>1 
order by count(id) desc;
赞(2)
MySQL学习笔记 » MySQL索引管理命令