zoukankan      html  css  js  c++  java
  • 数据库中索引相关基础知识

    索引的数据结构

    B-Tree: 也称为多路平衡查找树,并且所有叶子节点位于同一层。
    B+Tree:它不仅具有 B-Tree 的平衡性,并且可通过顺序访问指针来提高区间查询的性能。

    MySQL 索引

    索引,在MySQL也称为键 (Key),是存储引擎快速找到记录的一种数据结构 。相当于图书的目录,可根据目录中的页码快速找到所需的内容。

    索引结构类型

    1. B+Tree 索引
      • B+Tree 索引是大多数 MySQL 存储引擎的默认索引类型。
      • 因为 B+ Tree 的有序性 ,因此可用于部分查找 、 范围查找 、 排序和分组 。
      • 适用于全键值、键值范围和键前缀查找,其中键前缀查找只适用于最左前缀查找。若不是按照索引列的顺序进行查找,则无法使用索引。
    2. Hash 索引
      • Hash 索引能以 O(1) 时间进行查找,但是失去了有序性。因此无法用于排序与分组,无法用于部分查找和范围查找,只支持精确查找。
      • Hash 索引仅满足 = , IN 和 <=> 查询,不能使用范围查询。因为 Hash 索引比较的是Hash 运算后的 Hash 值,所以它只能用于等值的过滤。
    3. 全文索引
      • 全文索引使用倒排索引实现,它记录着关键词到其所在文档的映射。
    4. 空间数据索引
      • 空间数据索引会从所有维度来索引数据

    索引的优点缺点

    1. 优点
      • 大大减少了服务器需要扫描的数据行数。
      • 避免服务器进行排序和分组操作,以避免创建临时表 。
      • B+Tree 索引是有序的,可以用于 ORDER BY 和 GROUP BY 操作。临时表主要是在排序和分组过程中创建,不需要排序和分组,也就不需要创建临时表。将随机 I/O变为顺序 I/O 。
      • B+Tree 索引是有序的,会将相邻的数据都存储在一起。
    2. 缺点
      • 索引并不是越多越好,索引固然可以提高相应的 SELECT 的效率,但同时也降低了INSERT及UPDATE 的效率,因为 INSERT 或 UPDATE 时有可能会重建索引 。

    索引的设计原则

    从索引的优、缺点考虑索引的设计原则。

    1. 忌过度索引 :
      • 索引需要额外的磁盘空间,而且会降低写操作的性能。
      • 在修改表内容时,索引会进行更新甚至重构,索引列越多花销时间越长。为此优化检索性能,只保持需要的索引即可。
      • 经常用在 排列 、 分组 和 范围搜索 的列适合创建索引,因为索引是有序的。
      • 经常出现在 WHERE 子句的列,或是 JOIN 连接子句中指定的列适合创建索引。
    2. 使用短索引 :
      • 若对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间

    索引的优化策略

    • 独立的列:在进行查询时,索引列不能是 表达式 的一部分,也不能是 函数参数,否则无法使用 索引。
    • 多列索引: 在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更 好。
    • 索引列的顺序:让选择性最强的索引列放在前面。
    • 前缀索引:对于 BLOB、TEXT 和 VARCHAR 类型的列,必须使用前缀索引,只索引开始的部分字符。前缀长度的选取需要根据索引选择性来确定。
    • 覆盖索引:索引包含所有需要查询的字段的值。具有以下优点:
      • 索引通常远小于数据行的大小,只读取索引能大大减少数据访问量。
      • 一些存储引擎在内存中只缓存索引,而数据依赖于操作系统来缓存。因此,只访问索引可以不使用系统调用(通常比较费时)。

    索引的使用场景

    • 对于非常小的表:大部分情况下简单的全表扫描比建立索引更高效;
    • 对于中大型的表: 建立索引非常有效;
    • 对于特大型的表:建立和维护索引的代价将会随之增长。这种情况下,需要用到一种技术可以直接区分出需要查询的一组数据,而不是一条记录一条记录地匹配。例如可以使用分区技术。
  • 相关阅读:
    mysql 查看删除触发器等操作
    gtid同步异常处理
    使用MongoDB数据库(2)(三十六)
    使用MongoDB数据库(1)(三十五)
    使用Redis数据库(2)(三十四)
    使用Redis数据库(1)(三十三)
    多数据源配置与使用(2)(三十二)
    多数据源配置与使用(1)(三十二)
    使用Spring-data-jpa(2)(三十一)
    使用Spring-data-jpa(1)(三十)
  • 原文地址:https://www.cnblogs.com/zhangzizi/p/15043753.html
Copyright © 2011-2022 走看看