- MySQL 不同的引擎对于索引有不同的支持。
InnoDB 和 MyISAM 索引使用的是 B + Tree,而Mermory 索引使用的是 Hash。 - MySQL 一个表最多创建 64 个索引,索引最多包含 16 个列。
- MySQL 索引选用 B+树的原因
1)提高索引查询时的磁盘 IO效率,还可以提高范围查询的效率;
2)查询 IO 次数更少,特别是范围查询;
3)所有查询都有查找到叶子节点,查询性能稳定;
4)B+ 树里的元素也都是有序的; - MySql B+ 树索引和哈希索引的区别
1)哈希索引适合等值查询,但是无法进行范围查询;
2)哈希索引无法利用索引完成排序;
3)哈希索引不支持多列联合索引的最左匹配规则;
4)如果有大量重复键值的情况,就可能存在哈希碰撞问题,哈希索引的效率会很低;
所以说,B+ 树索引绝对适用于大多数场景,用B+ 树索引就可以了. - MySql 索引失效常见的场景
1)不符合索引最左匹配原则;
2)like 模糊查询以 % 开头;
3)索引列上使用了函数、表达式计算;
4)数据类型出现隐式转化,即查询条件索引列类型和查询数据类型不一致;
5)join 条件中索引列数据类型不一致;
6)条件存在 null 值,如:name is not null;
7)使用了 !=、<>、not in 判断条件;
8)查询条件使用了 or ,要想索引生效,or 中的每一列都加上索引; - MySql 引擎 MyISAM 和 InnoDB 的区别
1)MyISAM 不支持事务, InnoDB 支持事务;
2)MyISAM 只支持表级锁, InnoDB 支持表级锁和行级锁;
3)MyISAM 不支持外键,InnoDB 支持;
4)MyISAM 允许没有任何索引和主键,InnoDB 必须要有;
5)MyISAM 表和索引分两个文件存储,InnoDB 表和索引都保存再同一个数据文件中; - MySql 引擎的物理存储文件
1)MySql InnoDB 引擎在磁盘上存储了两个文件:- .frm
存在与表相关的元数据信息,包括表结构的定义信息等; - .idb
存在 InnoDB 所有表数据和索引;
2)MySql MyISAM 引擎在磁盘上存储了三个文件: - .frm
存在与表相关的元数据信息,包括表结构的定义信息等; - .myd
存储 MyISAM 引擎的表数据; - .myi 文件
存储 MyISAM 引擎的表索引相关数据;
- .frm
7.MySQL 索引的数据结构(四)
最新推荐文章于 2024-07-21 19:06:05 发布