mysql维护索引_高性能的MySQL(5)索引策略-索引和表的维护
维护表有三个主要的目的:
1、找到并修复损坏的表。
对于MyISAM存储引擎来说,表损坏通常是系统崩溃导致的。其他的引擎也会由于硬件的问题,MySQL本身的缺陷或者操作系统的问题导致索引的损坏。
损坏的索引,会导致查询返回错误的结果或者莫须有的主键冲突等问题,严重时还会导致数据库崩溃。
这类情况,可以尝试check table来检查是否发生了表损坏,有些存储引擎不支持这个命令。
可以使用repair table 来修复损坏的表,但同样不是所有引擎都支持该命令。
如果引擎不支持,可以使用alter操作重建表,或者将数据导出然后再重新导入。
InnoDB一般不会损坏,如果发生损坏,一般要么是数据库硬件问题,例如内存或者磁盘问题,要么就是数据库管理员操作导致。
常见的错误是由于尝试使用rsync备份InnoDB导致的。
如果是某条查询导致的,那一定是遇到了bug,而不是查询的问题。
2、维护准确的索引统计信息。
MySQL的查询优化器会通过2个API来了解存储引擎的索引值的分布信息,以决定如何使用索引。
第一个API是records_in_range(),通过向存储引擎传入两个边界值获取在这个范围大概有多少条记录。
对于某些引擎,该接口返回精确值,比方说MyISAM;对于InnoDB则是一个估算的值。
第二个API是info(),该接口返回各种类型的数据,包括索引的基数。
当返回信息不准确的时候,优化器会使用索引统计信息来估算扫描行数。如果表没有统计信息,或者统计信息不准确,优化器很可能做出错误的决定。
可以运行analyze table 来重新生成统计信息。
Memory引擎不存储索引统计信息
MyISAM将索引统计信息存储在磁盘中,analyze table 需要进行一次全表扫描,整个过程需要锁表。
MySQL5.5以后,InnoDB也不在磁盘存储索引统计信息,而是通过随机的索引访问来进行评估并存储在内存中。
使用show index from 命令可以察看索引基数(Cardinality)
InnoDB会在首次打开表,或者执行analyze table,或者表大小发生变化超过1/16或show table status,或show index时候都会计算索引的统计信息,如果服务器有大量的数据,这会是个严重的问题,只要show index查看索引统计信息就一定会触发统计信息更新,可以关闭
innodb_stats_on_metadata参数来关闭。
一旦关闭自动更新,那么需要周期性的使用analyze table 来手动更新,否则问题大了。
3、减少索引和数据碎片
B-Tree索引可能会碎片化,这会降低查询效率。碎片化的索引可能会以很差或者无序的方式存储在磁盘上。
可以通过optimize table 或者导出再导入的方式来重新整理数据。
对于不支持optimize table 的存储引擎,可以通过一个不做任何操作的alter table来重建表。alter table
也可以先删除索引,重建表,最后重新创建索引来实现。
索引的介绍就先到这里了,明天进入查询性能优化部分!
mysql维护索引_高性能的MySQL(5)索引策略-索引和表的维护相关推荐
- 阿里云服务器mysql内存限制_高性能的MySQL(8)优化服务器配置一内存
配置MySQL服务器离不开配置文件,接下来就开始这一部分的内容. 首先一定要清楚配置文件的位置,如果不知道可以尝试下面的操作: 有时候可以使用show global status 的输出来看状态,有的 ...
- mysql 树形结构_再读MySQL索引-《高性能MySQL》索引手记
最近工作中经常和MySQL打交道,当数据量小的时候,不同查询方式以及是否使用索引并无大碍,当数据量随着业务的成长急剧加速时,索引的重要性不言而喻. 本篇文章以<高性能MySQL>中的索引章 ...
- mysql to days 索引_高性能mysql优化二之索引篇
前言 为什么要使用索引?索引有什么用途呢?我的亲身经历,一个几千万数据的项目,我写了一条查询,没有用到索引,由于访问量比较大,瞬间网站就跪了,从此以后我写的每一条sql都会explain解析看是否用到 ...
- mysql数据库算法_数据库:MySQL索引背后的数据结构及算法原理【转】
原文:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话 ...
- mysql 删除重复索引_如何检查mysql的重复索引
展开全部 在一个生产库上,没有创建索引,是不可思议的,当然你的索引创e68a84e8a2ad62616964757a686964616f31333363373765建的太多了.冗余了,更是不可思议的. ...
- mysql 添加唯一索引_浅谈Mysql索引
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...
- mysql 字典索引_【大白话mysql】你真的了解 mysql 索引吗?
本文来源于公众号: 跬步匠心 什么是索引? 当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过拼音目录查找比我们拿起字典从头一页 ...
- mysql 什么树_搞懂MySQL InnoDB B+树索引
一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...
- 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)
无论何时,只要有多个查询需要在同一个时刻修改数据时,就会有并发问题.MySql主要在服务器层与存储引擎层进行并发控制. 假设数据库中国一张邮箱表,每个邮件都是一条记录.如果某个客户正在读取邮箱,同时其 ...
最新文章
- 材料成型计算机模拟第三版,材料成型计算机模拟考试复习资料.doc
- c语言程序设计第1章
- Allegro PCB find里面的筛选 各属性说明如 Clines或者Cline Segs
- wine最小化游戏后无法恢复的问题
- 使用jclouds在S3上分段上传
- 面向对象--闭包 继承
- SPLUNK 安装配置及常用语法
- CF1399E1 Weights Division (easy version)
- Photoshop CC 2019魔棒工具的抠图
- Android系统启动源码分析
- 三阶魔方还原步骤图_魔方小站三阶魔方盲拧视频教程 (蒙眼拧魔方教程|还原公式图解|3D动画)...
- Bugzilla windows安装
- 海底捞激励员工的方法符合哪些激励理论的建议
- 详解节省计划,一文了解最云原生的成本优化方式
- 吴晓波最劲爆演讲:终于把传统行业的转型升级都讲清楚了
- ETC脱落后如何重新线上激活
- 【已解决】导入tensorflow报错/python已停止工作/The kernel appears to have died
- printf()中%n格式说明符
- Altium designer2020基础使用教程
- iOS高性能Model转换框架----YYModel学习