什么时候创建索引
按照业务语句的需求创建合适的需求看。并不是将所有列都建立索引。不是索引越多越好。 将索引建立在,经常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;