Mysql索引优化梳理

学习笔记 2020/08/18 MYSQL

1.1、存储引擎

    InnoDB支持事务、行级锁,现已作为默认存储引擎。

        ChangeBuffering缓冲池,可减少维护辅助索引所需的磁盘I/O

    MyISAM不支持事务、表级锁

1.2、MySQL的内存分配

在为MySQL分配足够的内存之前,请考虑不同领域对MySQL的内存需求。要考虑的关键领域是:并发连接——对于大量并发连接,排序和临时表将需要大量内存。在撰写本文时,对于处理3000+并发连接的数据库,16GB到32GB的RAM是足够的。

内存碎片可以消耗大约10%或更多的内存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等缓存和缓冲区要消耗大约80%的已分配内存。

1.3、索引机制(Index)

本质:索引是数据结构

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。需要回表查询完整数据

InnoDB的数据文件本身就是索引文件,叶节点包含了完整的数据记录,所以InnoDB要求表必须有主键,如果不设置会自动生成一个隐式主键,这种索引就是聚集索引。查询时如果命中不需要回表,直接返回。

覆盖索引

覆盖索引遵循靠左原则,查询时如果需要返回的字段全部包含在索引中,则不需要回表。


索引合并(index merge)5.1开始引入

1个where条件里包含有2个以上的索引查询,对同一个表可以使用多个索引分别进行条件扫描。

index merge 算法根据合并算法的不同分成了三种:intersect(AND运算), union(OR运算), sort_union(多个条件扫描进行OR运算,但是不符合 index union merge算法的)


前缀索引

当需要创建索引的字段比较长时,这个索引将会很占内存,而且会很慢,这时就会用到前缀索引。

前缀索引从左侧截取固定长度字符串作为索引,重复度越低效果会越好。


唯一索引、普通索引

1.4、常用中间件

    360 Atlas、DDRS


本文地址:https://www.stayed.cn/item/244

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。