MySQL-索引优化篇(4)_索引的维护


在这里插入图片描述


官方文档

https://dev.mysql.com/doc/

在这里插入图片描述

如果英文不好的话,可以参考 searchdoc 翻译的中文版本

http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
在这里插入图片描述


删除重复索引

举个例子 ,对id 建立了多个索引 ,重复索引

primary key(id) 【主键索引】, unique key(id) 【唯一索引】, index(id)【普通索引】

主键上MySQL会自动创建索引的,所以就么有必要再对主键建立 唯一索引,更没有必要建立普通索引了。


删除冗余索引

举个例子

index(a) , index(a,b) 在a上建立普通索引 , 在a 、b 建立了联合索引。

这种情况是冗余的, 只需要保存 那个联合索引中就行了,删除 对a 单独建立的普通索引即可。

因为 a 都在左侧, 所以 查询a, 也是可以走那个联合索引的。


primary key(id), index(a, id) 

这种情况是冗余的,因为Innodb中对于二级索引会自动增加 主键索引,所以 也是没必要对a 和 主键id 建立联合索引的。


检查重复和删除的索引 pt-duplicate-key-checker

利用第三方插件 pt-duplicate-key-checker 。

pt-duplicate-key-checker是percona-toolkit中一个工具,它可以检测表中重复的索引或者主键,这款工具可以帮助我们找到重复的索引并给出建议。

下载地址: https://www.percona.com/downloads/percona-toolkit/LATEST/ ,选择合适的操作系统 下载。

在这里插入图片描述

安装

[root@artisan ~]# yum -y install percona-toolkit-3.1.0-2.el7.x86_64.rpm

在这里插入图片描述

位于 : /usr/bin/pt-duplicate-key-checker

用法

[root@artisan ~]# pt-duplicate-key-checker  --host=192.168.18.131 --user='root' --password='artisan'  --databases=artisan

更多用法 pt-duplicate-key-checker --help


查找未被使用的索引

SELECT
	OBJECT_SCHEMA,
	OBJECT_NAME,
	INDEX_NAME,
	b.`TABLE_ROWS`
FROM
	`performance_schema`.table_io_waits_summary_by_index_usage a
JOIN information_schema.`TABLES` b ON a.OBJECT_SCHEMA = b.TABLE_SCHEMA
AND a.OBJECT_NAME = b.TABLE_NAME
WHERE
	INDEX_NAME IS NOT NULL
AND COUNT_STAR = 0
ORDER BY
	OBJECT_SCHEMA,
	OBJECT_NAME;

在这里插入图片描述


更新索引统计信息

analyze table table_name

索引碎片整理

索引在使用的过程中 会产生碎片 , 表也在使用的过程中会产生碎片

查看 某个表的 碎片程度



SELECT
	ROW_FORMAT,
	TABLE_ROWS,
	DATA_LENGTH,
	INDEX_LENGTH,
	MAX_DATA_LENGTH,
	DATA_FREE,
	ENGINE
FROM
	information_schema.`TABLES`
WHERE
	TABLE_SCHEMA = 'SAKILA'
AND TABLE_NAME = 'ACTOR'
LIMIT 1;

整理

optimize table table_name 

这个地方需要注意,闲时操作。 使用不当会导致锁表

发布了819 篇原创文章 · 获赞 2030 · 访问量 415万+

猜你喜欢

转载自blog.csdn.net/yangshangwei/article/details/104146374