写点什么

高性能使用索引

作者:周杰伦本人
  • 2022 年 9 月 10 日
    贵州
  • 本文字数:1036 字

    阅读完需:约 3 分钟

高性能使用索引

索引三大优点:


  1. 索引大大减少了服务器需要扫描的数据量

  2. 索引可以帮助服务器避免排序和临时表

  3. 索引可以将随机 io 变为顺序 io


那么如何高性能的使用哦索引呢?

独立的列

所为独立的列就是索引列不能是表达式的一部分,也不能是函数的参数。

使用前缀索引

索引的选择性越高查询效率越高,选择性高的所有让 Mysql 在查找时过滤掉更多的行。唯一索引的选择性是 1,索引的选择性最好,性能也是最好的。


对于 BLOB,TEXT 或者很长的 VARCHAR 类型的列,必须使用前缀索引,因为 Mysql 不允许索引这些列的完整长度。

选择合适的所有列顺序

索引列的顺序意味着索引首先按照最左列进行排序,其次是第二列,来满足 order by group by distinct 等子句的查询


通常选择性最高的列放到索引最前列。

聚簇索引

聚簇索引不是索引类型而是一种数据存储格式。InnoDB 的聚簇索引实际上在同一个结构中保存了 B-Tree 索引和数据行。


聚簇索引的数据行实际上存放在索引的叶子页中。表中只能有一个聚簇索引,因为无法同时把数据行放在不同的地方。


InnoDB 通过主键聚集数据,没有主键 InnoDB 选择一个唯一的非空索引代替。如果没有唯一的非空索引,InnoDB 隐式定义一个主键作为聚簇索引,InnoDB 聚集在同一页面中的记录。


聚簇索引优点:


  • 可以把相关的数据保存在一起,通过磁盘读取少数的数据页就能获取指定数据

  • 数据访问更快。聚簇索引将索引和数据保存在同一个 B-Tree 中,因此从聚簇索引中获取数据比非聚簇索引中查找要快

  • 使用覆盖索引扫描的查询可以直接使用页节点中主键值。


聚簇索引缺点:


  • 聚簇数据最大限度提高了 IO 密集型应用的性能,当如果数据全部都放在内存中,聚簇索引没有优势

  • 插入速度依赖于插入顺序。按照主键的顺序插入是加载数据到 InnoDB 表中速度最快的方式。

  • 更新聚簇索引的代价高,强制 InnoDB 将每个被更新的行移动到新的位置

  • 基于聚簇索引的表在插入新行或者主键被更新导致需要移动行的时候,可能出现页分裂问题。当将一行插入到某个已满的页中,存储引擎会将该页分裂成两个页面来容纳该行,这就是页分裂,页分裂导致表占用更多的磁盘空间。

  • 聚簇索引导致全表扫描变慢,尤其是行比较稀疏或者页分裂导致数据存储不连续

  • 🎧非聚簇索引比想象的要更大,因为非聚簇索引的叶子节点包含了引用行的主键列。

  • 通过非聚簇索引查找行需要两次索引查找


非聚簇索引的叶子🍃节点保存的不是指向行的物理位置的指针,而是行的主键值。通过非聚簇索引查找行,先找到非聚簇索引的叶子节点获得对应的主键值,然后根据这个值去聚簇索引中查找对应的行。对于 InnoDB,自适应哈希索引可以减少二次索引。

发布于: 刚刚阅读数: 7
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
高性能使用索引_9月月更_周杰伦本人_InfoQ写作社区