冗余索引和未使用索引的危害

随着上线的业务越来越多,在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数据库冗余索引和未使用索引相关推荐

  1. python求小于n的所有素数_快速找出N以内的所有素数解法,python版本。这个应该是最快的了...

    作者:Raffeale/于大伟 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数. 一般正常人的解法是两次循环,假设求小于N的所有素数.一次用N-1之间的所有数去 ...

  2. mysql查询一个表有哪些索引_如何查看某张数据库表上都有哪些索引(转)

    索引使用简介 一. 关于索引的知识 要写出运行效率高的sql,需要对索引的机制有一定了解,下面对索引的基本知识做一介绍. 1. 索引的优点和局限 索引可以提高查询的效率,但会降低dml操作的效率. 所 ...

  3. 如何查看mysql默认字符集_如何找出MySQL中的默认服务器字符集?

    您可以使用系统变量character_set_server来了解MySQL中的默认服务器字符集.以下是语法-SHOW VARIABLES LIKE 'character_set_server'; 另外 ...

  4. 如何用excel计算断色断码_如何在EXCEL里面快速找出断码的衣服

    款式名称款式编码颜色名称SMLXL2XL3XL4XLT恤PB2008浅紫012227T恤PB2028白色003216T恤PB2028熟黄002003T恤PB2029白色0073313T恤PB2029大 ...

  5. win7为什么没有计算机,教你win7如何快速找出电脑没声音问题所在-win7之家

    在使用电脑的时候总是会遇到各种各样的问题,最近有不少用户发现电脑没声音,音箱和耳机都是没有声音的,这种现象是经常发生的事情,但是导致这种现象的原因也是很多的,如果要一一的排除的话又要浪费会很多时间又不 ...

  6. 第1章 游戏之乐——快速找出故障机器

    转载:编程之美_1.5_快速找出机器故障 题目:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据.其中ID是小于10亿的整数 问题1.在某个时间,如果 ...

  7. 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字

    /******************************************************************************* 文 件 名 : test100.cpp ...

  8. 表格字体缩小 php_如何快速找出两个Excel表格不同的地方?

    上一篇文章介绍了如何快速找出两个word文档不同的地方,这篇文章来说说如何快速找出两个Excel表格不同的地方,这里说的两个Excel表格,可以是同一个工作簿的不同sheet,也可以是两个不同的Exc ...

  9. 易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...

    ‍‍ 很多时候我们想删除文件或文件夹的时候,会出现文件正在使用的提示导致文件无法删除,如果知道是什么程序在使用这个文件好,但多数时候我们并不知道是被什么程序占用,那么在win7系统怎么快速找出文件被什 ...

最新文章

  1. 【飘移】仅需7个动作完成“斯堪的纳维亚钟摆”飘移过弯教程
  2. 详解Linux交互式shell脚本中创建对话框实例教程
  3. python爬虫下载-用Python爬虫下载整本小说
  4. SDNU 1423.入学考试(01背包)
  5. 手机应用软件测试经验总结
  6. c语言的一些字符串库函数的自己实现
  7. web-4. 装饰页面的图像
  8. python 获取麦克风声音_python调用pyaudio使用麦克风录制wav声音文件的教程
  9. Mathtype6.9保姆级安装教程,亲测可用-----经常踩坑
  10. 百度地图API生成厦门区级行政区划图
  11. pandas学习-中期测试
  12. TestCenter测试管理工具安装和卸载(B)
  13. 网络(Network)
  14. c语言全部题目及答案,C语言全部题目及答案
  15. Spring Boot缓存实战 默认Cache(ConcurrentMapCacheManager)
  16. 2021Java面试心得:java性能优化实践pdf
  17. 轻流入选 Forrester 中国制造商通过低代码加速价值交付案例研究报告
  18. php randomcode 函数,MyRandomCode.php
  19. PLC实验四节传送带的控制
  20. 人际交往与沟通技巧提升策略:如何说话恰到好处

热门文章

  1. 2012年5月份第2周51Aspx源码发布详情
  2. C# 判断一字符串是否为合法数字(正则表达式)
  3. javascript indexOf函数
  4. 数据结构——排序算法
  5. matlab trendsurface,MATLAB 添加新的预测性维护产品
  6. Python实现一个数组除以一个数
  7. ffmpy3与ffmpeg的简单使用
  8. MySQL流浪记(七)—— MySQL删除表数据
  9. PL/SQL-FOR UPDATE 与 FOR UPDATE OF的区别
  10. java 单例方法_Java-单例模式 - 惊觉