博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql索引
阅读量:4169 次
发布时间:2019-05-26

本文共 821 字,大约阅读时间需要 2 分钟。

索引模型

哈希表(使用于定值查询,不适用区间范围查询)

有序数组(适用与等值查询和范围查询,要求数据时静态保存,不被修改。因为数组增删,后面的记录都要挪动)
平衡二叉树(搜索效率高,但存储不便,因为索引要存在内存和磁盘,而二叉树回了保持平衡会导致树高很高,这样每次搜索速度虽然快,但花销太大)
多叉树(多叉树可以减少树高,使得磁盘访问次数减少,速度加快)

Mysql索引模型

在mysql中,索引由存储引擎实现,不同的存储引擎索引的工作方式也不一样。

InnoDB模型

表在InnoDB中根据索引以主键顺序形式存放,使用B+树索引模型。

每个索引都以B+树形式存在。
索引分为主键索引和非主键索引。

主键索引的叶子节点存储整行数据,也叫聚簇索引。

非主键索引叶子节点存储主键的值。

主键索引和普通索引查询时的区别:

使用主键索引查询时,直接搜索主键的B+树

使用普通索引,需通过普通索引查找得出主键的值再查找主键索引的B+树(回表),普通索引需多扫描一次索引树。
由此可见,主键索引速率更高。
通常建表时建议由自增主键。

索引维护

B+树为了维护索引的有序性,再插入新值和删除时需做必要的维护。

如当前的数据也已满,此时 再插入一个在该页值范围内的值,则需要创建多一个数据页,再挪动一些数据过去,这会导致空间的利用率降低,毕竟原本只需一张数据页数据存储的数据,现在新加一个值就要增加一张数据页的空间(页分裂)
当然有分裂就有合并,当数据页的一些值被删除,符合的条件下就可以合并。
使用自增主键,能使数据页的索引保持有序的增长。

自增主键使用场景

由上面的介绍,如果使用自增主键,则索引的值一直时递增,因此索引数据页内的值不需要挪动,避免出现页分裂。

如果表里面只有一个索引那么就可以使用其作为主键索引而不用自增主键。

如果由多个索引,因为普通索引里面存储的时主键索引的值,因此主键长度越小,则普通索引占用的空间越小,因此选择自增主键更为合适。

转载地址:http://dukai.baihongyu.com/

你可能感兴趣的文章
SpringBoot之开发web页面
查看>>
SpringBoot之快速部署
查看>>
springBoot之jar包在后台(运行:编写start、stop脚本)
查看>>
redis学习
查看>>
SpringBoot之application.properties文件能配置的属性
查看>>
javaWeb监听器、过滤器、拦截器
查看>>
RESTFUL风格的接口
查看>>
后台参数验证配置
查看>>
SpringBoot之外置Tomcat配置
查看>>
java 删除 list 中的元素
查看>>
idea启动优化
查看>>
java发展史
查看>>
Java内存区域
查看>>
数据库与模式的区别
查看>>
数字签名的原理
查看>>
showDialog
查看>>
Flex 拖拽范例
查看>>
flash builder 4 编译器参数
查看>>
flex常用网站
查看>>
flex 页面跳转
查看>>