索引基础概论
索引
定义
索引是对数据库表的一列或多列的值进行排序的一种结构,使用索引可以快速凡哥维纳数据表中的特定信息
优点
大大加快了数据检索的速度
-
将随机I/o变成顺序I/o因为B+树的所有叶子节点都是连接在一起的
-
加速表与表之间的连接
缺点
需要占用物理空间 创建和维护索引都需要花费时间
B+树 所有的数据都放在叶子节点上,所有查找的效率非常搞,并且支持排序和范围查找
哈希索引一般多用于精确的等值查找
全文索引 哈希索引 B+树索引 空间数据索引
索引的种类
-
主键索引 不允许重复
-
组合索引 多个列组成的索引
-
唯一索引 数据列不允许重复 索引的值必须是唯一的
-
全文索引 对文本的内容机型搜索
-
普通索引 可以为空
B+树特点
B+树具有有序性,并且所有的数据都存放在叶子节点上,所以查找的效率非常高,并且支持排序和范围查找
B+树的索引可以分为主索引和辅助索引。其中主索引为聚簇索引,辅助索引为非聚簇索引。聚簇索引是以主键作为B+树索引的简直所构成的B+树索引,聚簇索引的叶子节点村相互着完整的数据记录;非聚簇索引是以非主键的列作为B+树索引的简直所构成的B+树索引,非聚簇索引的叶子节点存储着主键值。所以使用非聚簇索引进行拆线呢时,会找到主键值,然后根绝聚簇索引找到主键对应的数据域。
哈希索引
哈希索引时刻根据哈希表实现的,对于每一行数据,存储殷勤会对索引列通过哈希算法进行哈希计算得到哈希码,并且哈希算法要尽量保证不同的列值计算出的哈希码时是不同的,将哈希码的值作为哈希表的key值,将指向数据行的指针所谓哈希表的value值。
B树和B+树的区别
B树的内部节点和叶子节点军方键和值,而B+树的内部节点只有键没有值,叶子节点存放所有的键和值
数据库为什么使用B+树而不是B树
-
B树使用于随机检索 而B+树适用于随机检索和顺序检索
-
B+树的空间利用率更改哦 因为B树的每个节点都要存储键和值,而B+树的内部节点只存储键 这样B+树的一个节点就可以存储更多的索引,从而使树的高度变低 减少了I/O次数 使得数据检索速度更快
-
B+树的叶子节点都是连在一起的,所以范围查找,顺序查找都更加方便
-
B+树的性能更加问电工,因为在B+树种,每次查询都是从根节点到叶子节点而在B树种,要查询的值可能不在叶子节点,在内部节点就可以找到
B树的内部节点可以存储值,可以把一些频繁访问的额值放在距离根节点比较近的地方 这样就可以提高查找效率
聚簇索引 非聚簇索引
-
聚簇索引 将数据和索引放到一起存储,索引结构的叶子节点保留了数据行
-
非聚簇索引 将数据和索引分开存储,索引叶子节点存储的是指向数据行的地址
默认的索引为B+树索引,利用主键创建的额索引为主索引,也是聚簇索引,在主索引之上创建的索引为辅助索引,也是非聚簇索引
辅助索引是在著所以i你之上创建的 因为辅助索引中叶子节点存储的是主键
MyISAM存储结构中,默认的索引也是B+树索引,但主索引和辅助索引都是非聚簇索引,索引结构的叶子节点存储的都是一个指向数据行的额地址 并且辅助索引减速有无需访问主键的索引
非聚簇索引的叶子节点存储的是主键
先通过非聚簇索引找到主键,再通过聚簇索引找到主键对应得数据,
通过聚簇索引找到对应得数据得过程就是回表查询
通过索引覆盖能解决非聚簇索引回表查询得问题
索引的使用场景
-
中大型表建立索引非常有效 对于非常小i的表,一般全部表扫描速度更快
-
超大型的表,建立和维护索引的代价比较高 分区技术可以帮忙
-
如果表的增删该非常多,查询需求非常少的话,就没有必要建立索引,维护索引需要付出代价
-
一般不会出现再where条件的字段就没有必要建立索引了
-
多个字段经常被查询的话可以使用联合索引
-
字段多且字段没有重复的时候考虑唯一索引
-
字多多且有重复的时候使用普通索引
索引的设计原则
-
最适合索引的列是再where后面出现的列或者连接句子中指定的列,而不是出现在SELECT关键字后面的选择列表中的列
-
索引列的基数越大,索引的效果就会越好,换句话说,就是索引项的区分度就越高,索引的效果就越好。比如使用性别这种区分度很低的列作为索引,效果就会很差,因为列的技术最多也只有三种,大多不是男性就是女性
-
尽量使用短索引,对于较长的字符串进行索引时应该指定一个较短的前缀长度,因为较小的索引设计到的磁盘I/O较少,并且索引高速缓存中的快可以容纳更多的简直,会使得查询速度更快
-
不要过度索引,每个索引都需要额外的物理空间,维护也需要花费时间
索引优化
对索引的优化其实最关键就是要符合索引的设计原则和应用场景,不呵呵要求的索引优化成符合索引设计原则和应用场景的索引
-
在进行查询时,索引项不能是表达式的一部分吗,也不能时函数的参数,因为这样无法使用索引
-
将区分度搞得索引放在前面
-
尽量少使用select
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
