索引

作者: Linseed | 来源:发表于2021-12-29 19:03 被阅读0次

索引数据结构

平衡树(非二叉) b-tree或b+ tree

image
  1. 叶子节点是实际的数据,数据在数据库中按页存储在磁盘上。
  2. 磁盘读写数据也是按照 “页” 为单位 一页一页地读取到内存。
  3. 建立了索引的表,表里面的数据是放在B树数据结构的索引页,而不是堆数据结构的数据页

组合索引

组合索引“最左前缀”

比如 :将 name, city, age建到一个索引里

建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:

name,city,age; name,city; name

聚集索引和非聚集索引区别

聚集索引:

  1. 一张表只能有一个聚集索引
  2. 通过聚集索引可以查到需要查找的数据

非聚集索引

  1. 一张表可以有多个非聚集索引,但是有最大数量限制
  2. 通过非聚集索引可以查到记录对应的主键值,再使用主键的值通过聚集索引查找到需要的数据
  3. 独立于数据表的结构,所以可以被放置在不同的文件组,使用不同的I/O路径,意味着SQL Server可以并行访问索引和表,使查找更快速。

索引优缺点

优点:

  1. 能让数据库查询数据的速度上升。(合理使用索引会加快查询速度)

缺点:

  1. 给表添加索引,会增加表的体积, 占用磁盘存储空间。
  2. 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

使用建议

  1. 主键尽量用数字类型作为聚集索引。
  2. 外键和join关联字段添加索引。
  3. Where 条件字段添加索引。
  4. 状态枚举值少的索引效果不好,甚至会引发全表扫描。
  5. select字段可以添加到非聚集索引的Include里。

非聚集索引的交叉

如果一个表有多个索引,那么SQL Server可以使用多个索引来执行一个查询。SQL Server可以利用多个索引,根据每个索引选择小的数据子集,然后执行两个子集的一个交叉(即只返回满足所有条件的那些行)。SQL Server可以在一个表上开发多个索引,然后使用一个算法来在两个子集中得到交叉(可以理解为求交集)

image

非聚集索引的本质是表,通过额外建立表使得几个非聚集索引之间进行像表一样的Join,从而使非聚集索引之间可以进行Join来在不访问基本表的情况下给查询优化器提供所需要的数据。

相关文章

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • Mysql优化

    一.索引科普 主键索引 唯一索引 普通索引 单列索引 多列索引 聚簇索引 非聚簇索引 前缀索引 全文索引 二.优化...

  • Oracle 索引学习

    创建索引 标准语法 唯一索引 组合索引 反向键索引 示例 删除索引 修改索引 重建索引 联机重建索引 合并索引

  • MySQL索引

    索引的作用 查看索引 创建索引 删除索引 索引类型 强制索引和禁止某个索引

  • Pandas数据操作

    Pandas数据操作 Series索引 行索引 切片索引 不连续索引 布尔索引 DataFrame索引 列索引 不...

  • 深入理解四种数据库索引类型(- 唯一索引/非唯一索引 - 主键索

    唯一索引/非唯一索引 主键索引(主索引) 聚集索引/非聚集索引 组合索引 唯一索引/非唯一索引 唯一索引 1.唯一...

  • MYSQL索引

    mysql的4种常用索引类型:唯一索引,主键索引,全文索引,以及普通索引。 普通索引(INDEX):普通索引为索引...

  • 索引类型

    索引类型有: 主键索引; 唯一索引; 普通索引; 全文索引; 多列索引;

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:索引

      本文链接:https://www.haomeiwen.com/subject/hcqbqrtx.html