MySQL--CREATE INDEX在各版本的优化
在MySQL 5.5版本中引入FIC(Fast index creation)特性,提升索引的创建速度。
FCI 操作流程:
(1)对表加共享S锁,允许其他会话读操作,但禁止写操作,
(2)扫描Cluster index的数据来构建新索引
(3)新索引创建完成,解除S锁,允许读写。 FCI 优点:
(1)创建索引不需要拷贝整表数据,创建速度快,
(2)创建索引过程中,可以快速中止。 FCI限制:
(1)FCI特新仅限于复制索引,不试用于聚集索引,
(2)索引创建期间,表只允许读不允许写。
在MySQL 5.6.7版本中引入Online DDL特性,允许联机创建索引。
Online create index流程
(1)扫描Cluster Index的数据来构建新索引
(2)使用RowLog来记录构建新索引中的数据变化
(3)锁定表禁止写,重放Rowlog到新索引上
(4)索引创建完成,新索引数据和Cluster Index数据保持一致,释放表锁。 Online DDL优点:
(1)在整个创建索引周期内,大部分时间原表可读写。
在MySQL 5.7.5版本中引入Bulk load for create index特性,进一步提升索引创建的速度,并提升索引“质量”。
操作流程:
(1)扫描Cluster Index数据,将数据放入sort buffer中排序,soft buffer写满后将数据写入临时文件
(2)对临时文件中的有序记录进行归并排序
(3)将排序后的数据写入到索引结构中,自下而上生产索引树。 非bulk load方式的缺点:
(1)排序效率,需要对每行数据在新索引中进行查找定位,确定该行数据的索引位置,定位需要从索引的根节点开始查找到索引的叶子节点。
(2)redo log,需要使用redo log来记录每行数据插入索引所产生的数据变化。
(3)undo log,需要使用undo log来记录每行数据的位置
(4)索引碎片和页拆分,随着数据行的不断插入,很容易导致索引页的拆分和索引树的自平衡,无法保证索引页的填充度。 bulk load方式的优点:
(1)排序效率,数据在sort buffer和临时文件中牌序合并,然后直接生成索引的叶子节点页,无需单独定位每行数据的位置。
(2)redo log,使用checkpoint来持久化生成的索引页,不会产生redo log。
(3)undo log,仅需要使用undo log来记录索引页的分配情况,产生的undo log较少。
(4)可以按照innodb_fill_factor参数来生成索引页,且不会导致页拆分,索引树需要平衡的次数较少。 bulk load方式的缺点:
(1)bulk load使用临时文件来存放sort buffer的结果,需要关注磁盘空间的使用率
(2)bulk load不产生redo log,数据库从write-ahead logging方式退化成direct persist data,导致依赖redo log实现的工具失效,如xtrabackup。
(3)bulk load需要不断地唤醒page cleaner线程来对新索引页进行checkpoint操作。
(4)仅支持普通索引和全文索引,不支持空间索引。
参考资料:
https://dev.mysql.com/doc/refman/5.7/en/sorted-index-builds.html
https://dev.mysql.com/worklog/task/?id=7277
https://yq.aliyun.com/articles/50758
##========================================================================##

MySQL--CREATE INDEX在各版本的优化的更多相关文章
- MySQL Index--CREATE INDEX在各版本的优化
FIC(Fast index creation)特性在MySQL 5.5版本中引入FIC(Fast index creation)特性,创建索引时无需再拷贝整表数据,以提升索引的创建速度. FCI 操 ...
- 8.2.1.4 Index Merge Optimization 索引合并优化:
8.2.1.4 Index Merge Optimization 索引合并优化: 索引合并方法是用于检索记录 使用多个 范围扫描和合并它们的结果集到一起 mysql> show index fr ...
- MySQL Backup--xtrabackup与Bulk Load for Create Index
场景描述:主从使用MySQL 5.7.19 1.从库上使用xtrabackup进行热备. 2.主库行执行DDL创建索引: ALTER TABLE `tb_xxx` ADD INDEX idx_good ...
- MySQL 5.6 中一个重要的优化——Index Condition Pushdown,究竟push down了什么
1 问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...
- mysql 添加索引,ALTER TABLE和CREATE INDEX的区别
nvicat-->mysql表设计-->创建索引. (1)使用ALTER TABLE语句创建索引,其中包括普通索引.UNIQUE索引和PRIMARY KEY索引3种创建索引的格式: PRI ...
- How MySQL Uses Indexes CREATE INDEX SELECT COUNT(*)
MySQL :: MySQL 5.7 Reference Manual :: 9.3.1 How MySQL Uses Indexeshttps://dev.mysql.com/doc/refman/ ...
- MySQL 创建索引(Create Index)的方法和语法结构及例子
MySQL 创建索引(Create Index)的方法和语法结构及例子 MySQL 创建索引(Create Index)的方法和语法结构及例子 CREATE INDEX Syntax CREATE ...
- mysql use index() 优化查询
mysql use index() 优化查询 FORCE INDEX/IGNORE INDEX 的语法: SELECT *** FROM TABLE [{USE|IGNORE|FORCE} INDEX ...
- mysql 索引查询 、创建 create index 与 add index 的区别
1.索引查询 ------TABLE_SCHEMA 库名:TABLE 表名 ------AND UPPER(INDEX_NAME) != 'PRIMARY' 只查询索引,不需要主键 SELECT ...
随机推荐
- 06python上
product_list=[ ('Mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike',2000), ] ...
- Linux命令:builtin
语法: builtin [shell-builtin [arg ...]] 说明: 明确告诉bash执行的是内建命令,而不是和内建命令同名的函数.这实际就是bash容许用户自定义和builtin命令同 ...
- JAVA设计模式一策略模式(Strategy Pattern)
什么是设计模式? 就是一些经验.让程序代码更具弹性.好维护.代码复用的经验.而且设计模式都遵从一些OO设计原则. 题外话:以下罗列出常用的OO设计原则:链接 本文章介绍策略模式(Strategy Pa ...
- 私活利器,docker快速部署node.js应用
http://cnodejs.org/topic/53f494d9bbdaa79d519c9a4a 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维, ...
- AR涂涂乐
<1> 涂涂乐着色 https://blog.csdn.net/begonia__z/article/details/51282932 http://www.manew.com/blog- ...
- uboot1.1.6
http://blog.csdn.net/lizuobin2/article/details/52061530
- linux百万并发之 tcp_mem
百万并发之 tcp_mem 在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来. 通过查看dmesg命令查看,发现大量TCP: too many of orphaned ...
- Jenkin配置执行远程shell命令
转载自 http://www.cnblogs.com/parryyang/p/6261730.html 在利用jenkins进行集成化部署的时候,我们在部署生成的war包时,往往需要进行一些备份,或者 ...
- Django REST framework的分页
DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...
- 247. Strobogrammatic Number II输出所有对称数字
[抄题]: A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at u ...