博客
关于我
MySQL索引详解(IT枫斗者)
阅读量:789 次
发布时间:2023-02-13

本文共 1104 字,大约阅读时间需要 3 分钟。

MySQL索引详解

什么是索引

索引是MySQL高效获取数据的数据结构。简单来说,索引就像是书的目录,能够加快数据库的查询速度。

事实上,索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。虽然索引的目录也很大,但它通常存储在磁盘文件中(可能单独存储在索引文件中,也可能与数据一起存储在数据文件中)。

索引的分类

单列索引

单列索引只包含单个列,但一个表中可以有多个单列索引。

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
  • 唯一索引:索引列中的值必须是唯一的,但允许为空值。
  • 主键索引:是一种特殊的唯一索引,不允许有空值。(主键约束,就是一个主键索引)。

组合索引

组合索引是指在表中的多个字段组合上创建的索引。只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合。

全文索引

全文索引只在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT类型字段上使用。全文索引是指在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行。

索引的数据结构

索引的数据结构使用的是B+树。B+树之所以被选择而不是二叉查找树、平衡二叉树或B树,是因为它更适合处理大规模数据。

B树:改造二叉平衡树

为了降低树的高度,B树将二叉平衡树改造成了多叉树。每个节点存储多个元素,这样树变得矮胖,查询效率更高。例如,存储1000个索引,B树的树高只有2层,就可以存储1百万条数据。

B+树:改造B树

B+树是在B树基础上进一步改造的,区别在于非叶子节点是否存储数据。B+树的非叶子节点只存储键值,叶子节点存储数据,并且叶子节点之间用双向指针连接。

B+树的最底层叶子节点包含了所有的索引项。每次查找都需要检索到叶子节点才能查询到数据。因此,B+树的树高理论上情况下比B树要矮。

MySQL索引的优化

避免回表

在InnoDB存储引擎中,辅助索引查询会导致回表操作,因为辅助索引叶子节点保存的数据不是当前记录的数据而是主键索引。这会消耗性能。避免回表的方法是使用覆盖索引。

例如,用户表的索引如果建立在(name, sex)上,而不是单独的name字段,可以避免回表。

联合索引的使用

联合索引可以节省空间,并更容易实现索引覆盖。联合索引(a_b_c)的使用比单独的a、a_b、a_b_c三个索引更高效。

在创建联合索引时,应将频繁使用的列和区分度高的列放在前面。如果当前索引存在频繁使用作为返回字段的列,可以考虑将其加入到联合索引中。

通过以上优化,可以显著提高数据库查询性能。

转载地址:http://xadfk.baihongyu.com/

你可能感兴趣的文章
MySQL相关命令
查看>>
mysql社工库搭建教程_社工库的搭建思路与代码实现
查看>>
Warning: Can't perform a React state update on an unmounted component. This is a no-
查看>>
mysql笔记 (早前的,很乱)
查看>>
MySQL笔记:InnoDB的锁机制
查看>>
mysql第一天~mysql基础【主要是DDL、DML、DQL语句,以及重点掌握存存引擎、查询(模糊查询)】
查看>>
mysql第二天~mysql基础【查询排序、分页查询、多表查询、数据备份与恢复等】
查看>>
MySQL简介和安装
查看>>
MySQL简单查询
查看>>
MySQL管理利器 MySQL Utilities 安装
查看>>
MySQL篇(管理工具)
查看>>
mysql类型转换函数convert与cast的用法
查看>>
mysql系列一
查看>>
MySQL系列之数据授权(安全)
查看>>
MySQL系列之数据类型(Date&Time)
查看>>
MySQL系列之数据类型(Date&Time)
查看>>
Mysql系列之锁机制
查看>>
Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)...
查看>>
MySql系列:[4200][1140]In aggregated query without GROUP BY, expression #2 of SELECT list contains nona
查看>>
MySQL索引
查看>>