MySql索引及原理分析

MySql索引及原理分析

目录

MySql索引及原理分析

什么是索引?为什么要有索引?

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+树结构对比
B树B+树数据结构对比

总结:Mysql选用B+树这种数据结构作为索引,可以提高查询索引时的磁盘IO效率,并且可以提高范围查询的效率,并且B+树里的元素也是有序的。


最左前缀原则

  • 当建立多个字段联合索引时,如(a,b,c) 查询条件只会走三类索引 即 a 、 ab 、 abc,   ac也走,但是只走a索引。
索引
联合索引分析

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值