bitsCN.com
作为MYSQL DBA需要定期的查看服务器的索引情况,尤其是当你到了一个新的环境,开始接手一些数据库的维护工作,需要对线上服务器的索引使用情况有所了解。如果索引设置不合理,会导致服务器的性能受到非常大的影响,尤其是当SQL语句又比较复杂(比如多表联合查询等),本来就来大致介绍一下线上数据库的索引改造,本文只是对个人的工作总结,如果大家有更好的索引改造方案,也请指点。
这里提到的索引改造主要分成如下几个阶段:
一、去除重复的索引 1. 为什么要去除重复的索引A. 多余的索引占用磁盘空间,会引起不必要的磁盘ioB. 多余的索引会导致数据库在进行索引选择的时候变慢,尤其是索引越多的时候越突出(主要是相关联的索引才会影响索引选择)C. 重复的索引会导致表的更新变慢
2. 如何找出重复的索引这里给大家介绍一个好用的Maatkit工具,Maatkit工具安装完成以后就会有一个mk-duplicate-key-checker命令,这个命令就是检测数据库中存在的重复索引,并会自动生成删除重复索引的语句,非常方便。
下面介绍Maatkit工具的安装和mk-duplicate-key-checker命令的使用。
Maatkit工具的安装:wget http://maatkit.googlecode.com/files/maatkit-7540.tar.gztar zxvf maatkit-7540.tar.gz cd maatkit-7540 perl Makefile.PL make installmk-duplicate-key-checker命令的使用:mk-duplicate-key-checker --databases=databasename --user=root --password=passwd这里只需要制定数据库名,用户名以及密码,如果还想知道其他的一些参数,可以使用命令mk-duplicate-key-checker –help查看。备注:提醒大家一下,在执行完删除重复索引的语句之后,还需要再用这个工具重新检测一下,因为删除重复之后还可能会出现新的重复索引,尤其是PHPCMS V9的数据库。
二、去除不必要的索引何为不必要的索引:我的理解是有一些字段辨识度很低的,比如abolish字段只有0和1,就没有必要建立索引,因为使用索引和全表扫描的速度差不多甚至肯能使用索引扫描会更慢。如果实在要建立,就根据查询情况和其他的字段建立组合索引效果会更好。
1. 为什么要去除不必要的索引这个理由和去除重复的索引差不多,这里就不详述了。
2.如何找出不必要的索引可以通过information_schema的STATISTICS表找出类似的索引,然后再经过人工过滤,应该还有更好的办法,呵呵。比如如下查询,能查询出制定库的辨识度低的列索引:SELECT TABLE_NAME,INDEX_NAME,COLUMN_NAME,CARDINALITY FROM `information_schema`.`STATISTICS` WHERE TABLE_SCHEMA='databasename' AND CARDINALITY 三、添加必须的索引何为必须的索引:我的理解比较简单就是会影响到查询性能的索引就是必须的索引
1. 为什么要添加必须的索引必须的索引会影响到数据库的查询性能,很简单又很充分的理由,呵呵!
2. 如何找出必须的索引 关于这个问题,我认为是比较有技术含量的,我的步骤如下:A. 找出性能差或者没有使用到索引的SQL语句要找出性能差或者没有使用到索引的SQL语句,需要做一些设置,比如将long_query_time设置成0.2秒左右,这个根据自己的环境来定,打开log_queries_not_using_indexes参数,可以通过set global log_queries_not_using_indexes=on;命令打开。可以通过mysqldumpslow命令来对慢查询日志进行统计,比如按照执行时间长短来提取或者按照执行次数来提取或者查询记录数来提取。列举两个非常常用的组合:mysqldumpslow -s t -t 10 slow.log #找出10条消耗时间最长的慢查询SQLmysqldumpslow -s c -t 10 slow.log #找出10条执行次数最多的满查询SQB. 通过explain和profiling分析性能差和没有用到索引的sql,确定需要添加的索引(也可能需要改写对应的SQL,这个不在本文的讨论范围),关于explain和profiling的用法读者可以自己查看相关的文档,这里不赘述。 作者 飞鸿无痕 bitsCN.com
0
0
相关文章
mysql如何实现活动倒计时_mysql服务器时间同步逻辑
mysql迁移服务器如何恢复数据_mysql迁移恢复流程
mysql报错2006是什么意思_mysql服务器断开连接
MySQL数据库基本概念中什么是存储过程?存储过程的定义与调用方法
mysql如何实现数据导出Excel_mysql结果集格式化处理
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。
7
2026.03.16
本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。
114
2026.03.13
本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。
141
2026.03.12
本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。
396
2026.03.11
本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。
65
2026.03.10
本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。
111
2026.03.09
热门下载
相关下载
精品课程
最新文章



