MySQL索引

什么事索引
索引是存储引擎用于快速找到记录的一种数据结构

索引的分类
根据数据结构分为:B+Tree索引、哈希索引、R-Tree索引、FULLTEXT索引
根据物理存储分为:聚簇索引、非聚簇索引
根据
根据逻辑角度分为:普通索引 INDEX、唯一索引/非唯一索引 UNIQUE、主键索引 PRIMARKY KEY、全文索引 FULLTEXT、组合索引

创建索引

ALTER TABLE `table_name` ADD INDEX index_name (`name`)   普通索引

最普通的索引,没有什么限制

ALTER TABLE `table_name` ADD UNQQUE (`name`)   唯一索引

索引列的值只允许有一个 允许为空

ALTER TABLE `table_name` ADD PRIMARKY KEY (`name`)  主键索引

不允许有空值

ALTER TABLE `table_name` ADD FULLTEXT (`name`)  全文索引

只用于MyISAM 表,针对较大的数据,比较消耗空间

ALTER TABLE `table_name` ADD INDEX index_name (`name1`,`name2`)  组合索引

遵循 最左前缀的规则

聚簇索引和非聚簇索引索引的区别
聚簇索引的叶子节点就是数据节点,非聚簇索引的叶子节点仍然是索引节点,有指向对应数据块的指针。

BTree 与 BTree-/BTree+ 索引原理
BTree
二叉树导致树高度非常高,逻辑上很近的节点,物理上非常远,无法利用局部性,IO 次数多,查找效率低

BTree-
每个节点都是二元数组[key,data],所有节点都可以存储数据,key 为索引,data 为索引外的数据。插入删除数据会破坏 BTree 性质,插入数据时候,需要对数据进行分裂、合并、转移等操作保持 BTree 性质,造成 IO 操作频繁

BTree+
非叶子节点不存储 data,只存储索引 key,只有叶子节点才存储 data

MySQL中的 BTree+
在经典 BTree+ 的基础上进行了优化,增加了顺序访问指针。在 BTree+ 的每个叶子节点增加了一个指向相邻叶子节点的指针,形成了带顺序访问指针的 BTree+,提高了区间访问性能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值