索引并不是越多越好,作为主键的字段不要再做索引。
查找重复及冗余索引
使用 pt- duplicate-key- checker 工具检查重复及冗余索引
pt-duplicate-key-checker \ -uroot \ -p " \ -h 127.0.0.1
重复及冗余索引
重复索引是指相同的列以相同的顺序建立的同类型的索引,如下表中
primary key 和 ID 列上的索引就是重复索引 create table test ( id int not null primay key, name varchar (10) not null, titile varchar (50) not null, unique (id) ) engine=innodb;
检查索引冗余的工具
1.维护和删除冗余索引:
2:30:
联合索引中包含了主键:innodb的特性,它会自动在每个索引后附加一个主键,
因此人为添加主键信息key(name,id)就是一个冗余索引;
2. 2:57 :查找重复及冗余索引的sql语句
要在information_schema数据库运行该语句
3. 使用pt-duplicate-key-checker工具查找重复及冗余索引
查找重复及冗余的索引
66666
索引优化:查找重复、冗余索引工具
索引优化:查找重复、冗余索引
SELECT a.TABLE_SCHEMA AS '数据名' , a.TABLE_NAME AS '表名' , a.INDEX_NAME AS '索引1' , b.INDEX_NAME AS '索引2' , a.COLUMN_NAME AS '重复列名' FROM STATISTICS a JOIN STATISTICS b ON a.TABLE_SCHEMA = b.TABLE_SCHEMA AND a.TABLE_NAME = b.TABLE_NAME AND a.SEQ_IN_INDEX = b.SEQ_IN_INDEX AND a.COLUMN_NAME = b.COLUMN_NAME WHERE a.SEQ_IN_INDEX = 1 AND a.INDEX_NAME <> b.INDEX_NAME
增加索引增加查询速度,但是减慢了insert update;
因此要查找处重复和冗余的索引(多个索引的前缀相同,或者联合索引中包含了主键的索引);可以 pt-duplicate-key-checker工具检查重复的索引,然后删除重复的索引
索引的维护及优化---查找重复及冗余索引
索引的维护及优化
冗余 索引
索引的优点:
1、提高查询的效率:select
索引的缺点:
1、降低写入的效率:insert、update、delete
索引存在的目的是为了加快查询的效率,不过不是索引越多越好,建立索引要适当才好。
过多的索引会增加数据库判断使用什么索引来查询的开销,所以,有时候也会出现以去掉重复或者无效的索引为优化手段的优化方式。
错误索引的结果:
降低所有操作的效率。
错误索引列表:
1、重复索引
查询的时候,如果加载重复索引越多,速度越慢。错误示范:
create table user(
id int not null primary key,
username varchar(10) not null,
address varchar(50) not null,
unique(id)
) engine=innodb;
2、冗余索引
Innodb 中,每个索引都会自动添加上主键,所以索引不用添加主键。错误示范:
create table user(
id int not null primary key,
username varchar(10) not null,
address varchar(50) not null,
key(name, id)
) engine=innodb;
利用工具枪柄重复索引及冗余索引
索引越多。分析过程越慢
使用工具查找重复索引
查找重复和冗余索引
查找重复及冗余索引
use information_schema;
SELECT a.TABLE_SCHEMA AS '数据名' ,a.TABLE_NAME AS '表名' ,a.INDEX_NAME AS '索引1' ,b.INDEX_NAME AS '索引2' ,a.COLUMN_NAME AS '重复列名' FROM STATISTICS a JOIN STATISTICS b ON a.TABLE_SCHEMA = b.TABLE_SCHEMA AND a.TABLE_NAME = b.TABLE_NAME AND a.SEQ_IN_INDEX = b.SEQ_IN_INDEX AND a.COLUMN_NAME = b.COLUMN_NAME WHERE a.SEQ_IN_INDEX = 1 AND a.INDEX_NAME <> b.INDEX_NAME;
查看表结构: show create table '';
alter table ... drop index 'emp_no';
使用pt-duplicate-key-checher工具检查重复及冗余索引
pt-duplicate-key-checker \
-uroot \
-p \
-h 127.0.0.1