索引

作者: MisAutumn | 来源:发表于2020-06-15 16:45 被阅读0次

1. 索引是什么
索引是将数据库排好序便于快速查询的数据结构。
快速查询,减少io,消除磁盘排序。

2. 索引的的分类

  1. 按结构划分
    聚簇索引/主索引:叶子节点记录行数据
    非聚簇索引/辅助索引:叶子节点记录主键

Innodb有且只有一个聚簇索引
a. 如果有PK, PK是聚簇索引
b. 如果没有,第一个非空unique列是
c. 否则,innodb自己创建一个row-id作为聚簇索引

  1. 按类型划分
    主键索引:不重复,不为空,一个表只有一个主键
    唯一索引:索引列的值必须唯一,允许有空值
    普通索引
    全文索引:仅可用于 MyISAM 表,使用倒排索引实现,记录了关键词到其所在文档的映射。
    组合索引:最左匹配原则
主键:ALTER TABLE table_name ADD PRIMARY KEY customer(customer_no);
唯一:ALTER TABLE table_name ADD UNIQUE (column1, column2); 
普通:ALTER TABLE table_name ADD INDEX (column1, column2);
全文:ALTER TABLE table_name ADD FULLTEXT (column);

2. 回表
通过普通索引去树中查找主键,根据主键去主索引树查找数据

3. 索引覆盖
从辅助索引中直接得到查询结果,不需要回表
using index

4. 索引下推、谓词下推
从存储引擎拉取数据的时候先根据where做筛选,存储引擎层过滤数据
using index condition

5. 什么时候会有索引失效

  1. 不符合最左匹配原则:like %开头、联合索引中没有索引头
  2. 组合索引如果中间某个值使用范围查询,范围条件后的索引会失效
  3. 使用函数、表达式、!= 、<>、is null、is not null
  4. 类型不匹配,涉及隐式转换 where id+1=4
  5. 数据量特别大
  6. or 在某些情况下会失效
  7. order by后的列是用于排序的,不用于查找,失效

6. 索引的数据结构
B-Tree 平衡多路查找树,树的高度较低,减少磁盘io操作和时间复杂度,保持查找速度
B+Tree:可用于排序和分组,保存数据的索引,可以范围查找
树的叶子节点可用顺序指针访问,插入删除仅在叶子节点进行,需要维持平衡(分裂,合并,旋转)

7.不适合创建索引的情况

  1. 经常需要更新的字段,更新时还需要进行索引重构消耗资源
  2. 数据重复性较大的,唯一性较差的字段
  3. 参与列计算的列不走索引

8.利用索引覆盖优化sql的场景

  1. count(索引列)代替count(*)
  2. 列查询表优化,单列索引升级为联合索引,避免回表
  3. 分页查询

参考

相关文章

  • 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/bgpgzhtx.html