诸葛,事物 ,MVCC,日志 (BufferPool缓存机制)
1.索引数据结构红黑树、Hash、B+树详解
- 慢sql查询,优化sql手段:添加索引
- 索引是帮助mysql 高效获取数据的排好序的数据结构
- 索引数据结构:
- 二叉树
- 红黑树
- Hash表
- B-Tree
2.存储引擎
2.1 MyISAM
MyISAM索引文件和数据文件是分离的(非聚集索引)
数据库中的表是以文件的形式存放在磁盘中
- -frm :表结构
- -MYD :表数据
- -MYI : 表索引 ,底层B+树,里面子叶有存储value(索引所在行的磁盘地址),然后根据value地址可以去MYD文件中查找对应数据
2.2 InnoDB
索引文件和数据文件是放在一起的,所以InnoDB的主键索引是聚集索引,聚集索引查找效率高些;它的其它二级索引是非聚集索引,子页存放的是对应主键的列值。一张有且仅有一个聚集索引,InnoDB表必须建立主键,使用整型(使用整型的原因:由于数字作为主键,底层使用二叉树对数字”比较查找“效率比字符串快,整型可以节省磁盘空间,因此字符串不适合做主键)自增主键
数据库中的表是以文件的形式存放在磁盘中
- -frm : 表结构
- -ibd : 表索引和数据
3.聚集索引、覆盖索引和索引下推
-
索引最左前缀原则(必须使用建立索引的顺序,不能跳过其中一个索引,而使用后面的那个索引,如果跳过,使用右边的索引,那么使用这个去查找,就不是排好序的数据了,这就相当于要把整张表的所有索引都要找一便,那这跟全表扫描就区别不太,整个sql的查询性能也没得到提高,用户的体验感也降低)
这样使用索引最左前缀原则,就能高效的定位索引找数据
-
BufferPool 缓存池
-
索引规约:
- 超过三张表禁止 join ,少用连表,尽量单表
- 单表索引数量控制5个以内
- 不允许存在重复索引和冗余索引
- 防止字段隐式转换导致的索引失效
- SQL优化目标:至少到达range 级别
- 利用覆盖索引避免回表操作
- 禁止超过三个表的join
- 在varchar 上建立索引,指定索引长度
- 索引字段值不允许设置为null,必须设置默认值
- 单表数据量控制在1000w 以内
- 字段列数量建议在30以内
- 不建议使用MySQL分区表
、