mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引
冗余索引和未使用索引的危害
随着上线的业务越来越多,在MySQL数据库中建的表也会越来越多,为提高查询访问速度,会创建相应的索引。但是由于技术人员的水平参差不齐,业务下线,代码逻辑变更等原因,导致线上数据库会有冗余索引或者从未使用的索引存在,这些索引不仅消耗大量的磁盘空间,而且还会影响数据库的insert,update性能,因此作为数据库管理人员,需要及时发现这些冗余索引和未使用索引,并及时清理。
冗余索引和未使用索引定位
要找出线上数据库的冗余索引和未使用索引,使用工具,会让你事半功倍,例如percona-toolkits工具集就提供pt-duplicate-key-checker和pt-index-usage就能非常方便找出数据库的冗余索引和未使用索引。
在MySQL5.7的版本sys模式下,schema_redundant_indexes和schema_unused_indexes两个视图,更方便直接的展示,个人感觉比pt-duplicate-key-checker和pt-index-usage的方便和准确。
下面就来具体查看一下相关信息。
找重复索引,并提供drop index语句
mysql> select * from schema_redundant_indexesG;*************************** 1. row *************************** table_schema: sbtest table_name: sbtest1 redundant_index_name: k_1 redundant_index_columns: kredundant_index_non_unique: 1 dominant_index_name: idx_sbtest1_k dominant_index_columns: k dominant_index_non_unique: 1 subpart_exists: 0 sql_drop_index: ALTER TABLE `sbtest`.`sbtest1` DROP INDEX `k_1`*************************** 2. row *************************** table_schema: sbtest table_name: sbtest1 redundant_index_name: idx_sbtest1_id_k redundant_index_columns: id,kredundant_index_non_unique: 1 dominant_index_name: PRIMARY dominant_index_columns: id dominant_index_non_unique: 0 subpart_exists: 0 sql_drop_index: ALTER TABLE `sbtest`.`sbtest1` DROP INDEX `idx_sbtest1_id_k`
在这里确认一下,这个视图找出来的重复index是否准确,看看sbtest.sbtest1的表结构
mysql> show create table sbtest.sbtest1G;*************************** 1. row *************************** Table: sbtest1Create Table: CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`), KEY `idx_sbtest1_id_k` (`id`,`k`), KEY `idx_sbtest1_k` (`k`)) ENGINE=InnoDB AUTO_INCREMENT=5000001 DEFAULT CHARSET=utf8 MAX_ROWS=10000001 row in set (0.00 sec)
k_1,idx_sbtest1_id_k,idx_sbtest1_k三个索引确实是冲突了,系统建议保留idx_sbtest1_k这个索引。
来定位未使用索引
mysql> select * from schema_unused_indexes;+---------------+-------------+--------------------+| object_schema | object_name | index_name |+---------------+-------------+--------------------+| sbtest | sbtest1 | k_1 || sbtest | sbtest1 | idx_sbtest1_id_k || sbtest | sbtest1 | idx_sbtest1_k || sbtest | t_pay_test | k_1 || sbtest | t_pay_test | idx_t_pay_test_k_c |+---------------+-------------+--------------------+5 rows in set (0.00 sec)
删除未使用索引时,需要注意一下,建议每个月都获取一次,如果连续3个月都没有使用,可以删除掉。
mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引相关推荐
- python求小于n的所有素数_快速找出N以内的所有素数解法,python版本。这个应该是最快的了...
作者:Raffeale/于大伟 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数. 一般正常人的解法是两次循环,假设求小于N的所有素数.一次用N-1之间的所有数去 ...
- mysql查询一个表有哪些索引_如何查看某张数据库表上都有哪些索引(转)
索引使用简介 一. 关于索引的知识 要写出运行效率高的sql,需要对索引的机制有一定了解,下面对索引的基本知识做一介绍. 1. 索引的优点和局限 索引可以提高查询的效率,但会降低dml操作的效率. 所 ...
- 如何查看mysql默认字符集_如何找出MySQL中的默认服务器字符集?
您可以使用系统变量character_set_server来了解MySQL中的默认服务器字符集.以下是语法-SHOW VARIABLES LIKE 'character_set_server'; 另外 ...
- 如何用excel计算断色断码_如何在EXCEL里面快速找出断码的衣服
款式名称款式编码颜色名称SMLXL2XL3XL4XLT恤PB2008浅紫012227T恤PB2028白色003216T恤PB2028熟黄002003T恤PB2029白色0073313T恤PB2029大 ...
- win7为什么没有计算机,教你win7如何快速找出电脑没声音问题所在-win7之家
在使用电脑的时候总是会遇到各种各样的问题,最近有不少用户发现电脑没声音,音箱和耳机都是没有声音的,这种现象是经常发生的事情,但是导致这种现象的原因也是很多的,如果要一一的排除的话又要浪费会很多时间又不 ...
- 第1章 游戏之乐——快速找出故障机器
转载:编程之美_1.5_快速找出机器故障 题目:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据.其中ID是小于10亿的整数 问题1.在某个时间,如果 ...
- 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
/******************************************************************************* 文 件 名 : test100.cpp ...
- 表格字体缩小 php_如何快速找出两个Excel表格不同的地方?
上一篇文章介绍了如何快速找出两个word文档不同的地方,这篇文章来说说如何快速找出两个Excel表格不同的地方,这里说的两个Excel表格,可以是同一个工作簿的不同sheet,也可以是两个不同的Exc ...
- 易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...
很多时候我们想删除文件或文件夹的时候,会出现文件正在使用的提示导致文件无法删除,如果知道是什么程序在使用这个文件好,但多数时候我们并不知道是被什么程序占用,那么在win7系统怎么快速找出文件被什 ...
最新文章
- 【飘移】仅需7个动作完成“斯堪的纳维亚钟摆”飘移过弯教程
- 详解Linux交互式shell脚本中创建对话框实例教程
- python爬虫下载-用Python爬虫下载整本小说
- SDNU 1423.入学考试(01背包)
- 手机应用软件测试经验总结
- c语言的一些字符串库函数的自己实现
- web-4. 装饰页面的图像
- python 获取麦克风声音_python调用pyaudio使用麦克风录制wav声音文件的教程
- Mathtype6.9保姆级安装教程,亲测可用-----经常踩坑
- 百度地图API生成厦门区级行政区划图
- pandas学习-中期测试
- TestCenter测试管理工具安装和卸载(B)
- 网络(Network)
- c语言全部题目及答案,C语言全部题目及答案
- Spring Boot缓存实战 默认Cache(ConcurrentMapCacheManager)
- 2021Java面试心得:java性能优化实践pdf
- 轻流入选 Forrester 中国制造商通过低代码加速价值交付案例研究报告
- php randomcode 函数,MyRandomCode.php
- PLC实验四节传送带的控制
- 人际交往与沟通技巧提升策略:如何说话恰到好处