MySQL配置索引页的合并阈值
MySQL配置索引页的合并阈值
如果删除行或者通过UPDATE操作缩短行
可以为索引页面配置MERGE_THRESHOLD值。 当delete与update缩短了行长度时,索引页的“page-full”百分比低于MERGE_THRESHOLD值,InnoDB会尝试将索引页与相邻索引页合并。 默认的MERGE_THRESHOLD值为50。 MERGE_THRESHOLD的最小值为1,最大值为50。
当索引页面的“page-full”百分比低于50%时,InnoDB会尝试将索引页与相邻页合并。 如果两个页面都接近50%已满,则在合并页面后很快就会发生页面拆分。 如果频繁发生此合并拆分行为,则可能会对性能产生负面影响。 为避免频繁的合并拆分,您可以降低MERGE_THRESHOLD值,以便InnoDB以较低的“page-full”百分比尝试页面合并。 以较低页面满百分比合并页面会在索引页面中留出更多空间,并有助于减少合并拆分行为。
可以为表或单个索引定义索引页的MERGE_THRESHOLD。 为单个索引定义的MERGE_THRESHOLD值优先于为表定义的MERGE_THRESHOLD值。 如果未定义,则MERGE_THRESHOLD值默认为50。
1. 为表设置MERGE_THRESHOLD
可以使用CREATE TABLE语句的table_option COMMENT子句为表设置MERGE_THRESHOLD值。例如:
CREATE TABLE t1 (
id INT,
KEY id_index (id)
) COMMENT='MERGE_THRESHOLD=45';
还可以使用带有ALTER TABLE的table_option COMMENT子句为现有表设置MERGE_THRESHOLD值:
CREATE TABLE t1 (
id INT,
KEY id_index (id)
);
ALTER TABLE t1 COMMENT='MERGE_THRESHOLD=40';
2. 为单个索引设置MERGE_THRESHOLD
要为单个索引设置MERGE_THRESHOLD值,可以将index_option COMMENT子句与CREATE TABLE,ALTER TABLE或CREATE INDEX一起使用,如以下示例所示:
- 使用
CREATE TABLE为单个索引设置MERGE_THRESHOLD:
CREATE TABLE t1 (
id INT,
KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40'
);
- 使用
ALTER TABLE为单个索引设置MERGE_THRESHOLD:
CREATE TABLE t1 (
id INT,
KEY id_index (id)
);
ALTER TABLE t1 DROP KEY id_index;
ALTER TABLE t1 ADD KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40';
- 使用CREATE INDEX为单个索引设置MERGE_THRESHOLD:
CREATE TABLE t1 (id INT);
CREATE INDEX id_index ON t1 (id) COMMENT 'MERGE_THRESHOLD=40';
3. 查询索引的MERGE_THRESHOLD值
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES WHERE NAME='id_index' \G
*************************** 1. row ***************************
INDEX_ID: 91
NAME: id_index
TABLE_ID: 68
TYPE: 0
N_FIELDS: 1
PAGE_NO: 4
SPACE: 57
MERGE_THRESHOLD: 40
如果使用table_option COMMENT子句显式定义,则可以使用SHOW CREATE TABLE查看表的MERGE_THRESHOLD值:
mysql> SHOW CREATE TABLE t2 \G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id` int(11) DEFAULT NULL,
KEY `id_index` (`id`) COMMENT 'MERGE_THRESHOLD=40'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
同样,如果使用index_option COMMENT子句显式定义,则可以使用SHOW INDEX查看索引的MERGE_THRESHOLD值:
mysql> SHOW INDEX FROM t2 \G
*************************** 1. row ***************************
Table: t2
Non_unique: 1
Key_name: id_index
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment: MERGE_THRESHOLD=40
4. 查看MERGE_THRESHOLD设置的效果
INNODB_METRICS表提供了两个计数器,可用于衡量MERGE_THRESHOLD设置对索引页面合并的影响。
SELECT t.NAME,
t.SUBSYSTEM,
t.STATUS,
t.COMMENT
FROM INFORMATION_SCHEMA.INNODB_METRICS t
WHERE t.NAME LIKE '%index_page_merge%';
+-----------------------------+-----------+----------+----------------------------------------+
| NAME | SUBSYSTEM | STATUS | COMMENT |
+-----------------------------+-----------+----------+----------------------------------------+
| index_page_merge_attempts | index | disabled | Number of index page merge attempts |
| index_page_merge_successful | index | disabled | Number of successful index page merges |
+-----------------------------+-----------+----------+----------------------------------------+
2 rows in set (0.00 sec)
降低MERGE_THRESHOLD值时,目标是:
较少的页面合并尝试次数和成功的页面合并次数
相似数量的页面合并尝试和成功的页面合并
MERGE_THRESHOLD设置太小可能会导致大量数据文件,因为空页空间过多。
MySQL配置索引页的合并阈值的更多相关文章
- MySQL-8.0.x 新特性之索引页合并
[背景] 索引的重要是在些不表.在这里我想说的另一个问题:索引和数据一样在innodb中都是以page的形式来组织的,那么问题就来了. 比如果说索引 ix_person_name 的内容只要8个页面就 ...
- MYSQL 索引页 结构图
create table t( a ) not ) default null,primary key(a)); mysql> select * from t; +----+------+ | a ...
- MySQL InnoDB 索引 (INDEX) 页结构
MySQL InnoDB 索引 (INDEX) 页结构 InnoDB 为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做索引页 索引页内容 索引页分为以下部分: File Header:表 ...
- python/MySQL(索引、执行计划、BDA、分页)
---恢复内容开始--- python/MySQL(索引.执行计划.BDA.分页) MySQL索引: 所谓索引的就是具有(约束和加速查找的一种方式) 创建索引的缺点是对数据进行(修改.更新.删除) ...
- MySQL InnoDB 索引原理
本文由 网易云发布. 作者:范鹏程,网易考拉海购 InnoDB是 MySQL最常用的存储引擎,了解InnoDB存储引擎的索引对于日常工作有很大的益处,索引的存在便是为了加速数据库行记录的检索.以下是 ...
- 数据库MySQL 之 索引原理与慢查询优化
数据库MySQL 之 索引原理与慢查询优化 浏览目录 索引介绍方法类型 聚合索引辅助索引 测试索引 正确使用索引 组合索引 注意事项 查询计划 慢查询日志 大数据量分页优化 一.索引介绍方法类型 1. ...
- MySQL配置参数详解
# 以下选项会被MySQL客户端应用读取. # 注意只有mysql附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...
- mysql:索引原理与慢查询优化
一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数.相似的例子还有:查字典,查火车车次,飞机航班等 本 ...
- 第二百八十八节,MySQL数据库-索引、limit分页、执行计划、慢日志查询
MySQL数据库-索引.limit分页.执行计划.慢日志查询 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获 ...
随机推荐
- mongodb 安装问题
重新安装一台机器时出现头疼的问题,老是说什么 dbpath 不存在 结果最后发现是没有写 mongodb.log 这个log文件名 1. 创建 datas 文件夹 e:\mongodb\datas ...
- 纯JS实现元素加速运动的函数封装
//elem:给哪个元素添加位移:direction:是垂直方向的话就传入top,水平方向left:speed控制速度,向下.向右传入正值,反之传入负值:distance表示位移的距离function ...
- 安装 synaptic on ubuntu 18
apt的图形化界面管理 sudo apt install synaptic 安装后使用需要注意的是 如果打开了synaptic,终端中apt命令某些是没法正常用的,比如说apt remove,应该是锁 ...
- background-size属性
background-size:属性有 auto:length :百分比 length 如:10px 20px 固定的 或者是写成一个 ,10px 另外一个就默认为 auto; 写成百分比的形式 是 ...
- Qt样式表之二:QSS语法及常用样式
一.简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同.如果你熟悉CSS,可以快速浏览以下内容.不熟悉的话可以先去W3School - CSS或者本人的CSS博客随笔简单了解一下. 在 ...
- stack(单调栈) POJ 2082 Terrible Sets
题目传送门 题意:紧贴x轴有一些挨着的矩形,给出每个矩形的长宽,问能组成的最大矩形面积为多少 分析:用堆栈来维护高度递增的矩形,遇到高度小的,弹出顶部矩形直到符合递增,顺便计算矩形面积,且将弹出的宽度 ...
- Vue-cli构建项目, 组件中js代码引入图片路径问题
问题描述 .vue的组件分成三个部分, template结构部分, script路径代码, style页面样式 首先, 我们可以在template可以正确引入, 无论是dev, 还是build都没有问 ...
- 18.5.1使用Proxy和InvocationHandler创建动态代理
package d18_5_1; public interface Person { void walk(); void sayHello(String name); } package d18_5_ ...
- port 22: Connection refused
issue: os>ssh 196.168.27.90ssh: connect to host 196.168.27.90 port 22: Connection refused solutio ...
- MongoDB学习笔记~监控Http请求的消息链
在微服务架构里,你的一个任务可以需要经过多次中转,去多个接口获取数据,而在这个过程中,出现问题后的解决就成了一个大难点,你无法定位它的问题,这时,大叔的分布式消息树就出现了,费话不多说,主要看一下实现 ...