mysql优化<索引存储方式>

1.哈希索引

1.1哈希索引的特点

基于哈希表的实现,只有精确匹配索引所有列的查询才有效

在mysql中,只有memory的存储引擎显式支持哈希索引

哈希索引自身只需存储对应的hash值,所以索引的结构十分紧凑,这让哈希索引查找的速度非常快

1.2哈希索引的限制

1、哈希索引只包含哈希值和行指针,而不存储字段值,索引不能使用索引中的值来避免读取行

2、哈希索引数据并不是按照索引值顺序存储的,所以无法进行排序

3、哈希索引不支持部分列匹配查找,哈希索引是使用索引列的全部内容来计算哈希值

6、哈希冲突比较多的话,维护的代价也会很高

当需要存储大量的URL,并且根据URL进行搜索查找,如果使用B+树,存储的内容就会很大
select id from url where url=""
也可以利用将url使用CRC32做哈希,可以使用以下查询方式:
select id fom url where url="" and url_crc=CRC32("")
此查询性能较高原因是使用体积很小的索引来完成查找

2.组合索引

当包含多个列作为索引,需要注意的是正确的顺序依赖于该索引的查询,同时需要考虑如何更好的满足排序和分组的需要

案例,建立组合索引a,b,c

3.聚簇索引与非聚簇索引

3.1聚簇索引

不是单独的索引类型,而是一种数据存储方式,指的是数据行跟相邻的键值紧凑的存储在一起

优点:

1、可以把相关数据保存在一起

2、数据访问更快,因为索引和数据保存在同一个树中

3、使用覆盖索引扫描的查询可以直接使用页节点中的主键值

缺点:

1、聚簇数据最大限度地提高了IO密集型应用的性能,如果数据全部在内存,那么聚簇索引就没有什么优势

2、插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式

3、更新聚簇索引列的代价很高,因为会强制将每个被更新的行移动到新的位置

4、基于聚簇索引的表在插入新行,或者主键被更新导致需要移动行的时候,可能面临页分裂的问题

5、聚簇索引可能导致全表扫描变慢,尤其是行比较稀疏,或者由于页分裂导致数据存储不连续的时候

3.2非聚簇索引

数据文件跟索引文件分开存放

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧冶渃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值