MySql索引及原理分析
目录
什么是索引?为什么要有索引?
索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,
直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。如果有了索引,那么会将字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。
MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段
索引是在存储引擎中实现的:
- MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换
- MEMORY/HEAP存储引擎:支持HASH和BTREE索引
MYSQL索引的分类
- 单列索引(普通索引):【MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。】
- 唯一索引:【索引列中的值必须是唯一的,但是允许为空值】
- 主键索引:【是一种特殊的唯一索引,不允许有空值。】
- 组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。
- 全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行。比如有"你是个大煞笔,二货 ..." 通过大煞笔,可能就可以找到该条记录
- 空间索引:空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。在创建空间索引时,使用SPATIAL关键字。要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL
索引原理分析
- 索引是最常见的慢查询优化方式
- 其是一种优化查询的数据结构,MySql中的索引是用B+树实现,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,优化查询。可以提高查询速度的数据结构:
- 哈希表、完全平衡二叉树、B树、B+树等等。 为什么选择B+树?
- 哈希:select*from sanguo where name>'周瑜 哈希表的特点是可以快速的精确查询,但是不支持范围查询。
- 完全平衡二叉树:对于数据量大情况,它相比于哈希或者B树、B+树需要查找更多次。
- B树:比完全平衡二叉树要矮,查询速度更快,所需索引空间更小。
- B+树:B+树比B树要胖,B+树的非叶子节点会冗余一份在叶子节点中,并且也在叶子节点会用指针相连。
- B树相比完全平衡二叉树查询次数更少,即有更少的磁盘IO次数,性能更优;
- B+树是B树的升级版,其为了提高范围查找的效率。
![]()
B树B+树数据结构对比 总结:Mysql选用B+树这种数据结构作为索引,可以提高查询索引时的磁盘IO效率,并且可以提高范围查询的效率,并且B+树里的元素也是有序的。
最左前缀原则
- 当建立多个字段联合索引时,如(a,b,c) 查询条件只会走三类索引 即 a 、 ab 、 abc, ac也走,但是只走a索引。
![]()
联合索引分析
MySql索引及原理分析
最新推荐文章于 2022-01-06 14:32:58 发布