博客
关于我
Mysql索引一篇就够了
阅读量:789 次
发布时间:2023-02-13

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

索引的概念与实现

索引在数据库中扮演着重要角色,其主要作用是通过对数据进行预处理,提升查询效率。然而,索引的创建也需要付出一定的代价。本文将深入探讨索引的定义、目的、分类以及实际存储结构,并分析其在数据库中的应用。

1. 索引的定义

索引可以被视为数据库表中一列或多列值的排序结构。其核心作用是通过预先对数据进行排序,使得查询时能够快速定位到所需记录,从而显著降低查询时间。

2. 索引的目的

数据库索引好比一本书的目录,能够帮助快速定位到所需信息。然而,索引的创建也需要消耗资源:

  • 存储空间增加:索引会额外占用数据库的存储空间。
  • 插入和修改时间延长:当数据进行插入或修改操作时,索引也需要相应更新,增加了数据库的负载。

3. 索引的分类

索引可以根据其存储结构和用途分为多种类型,以下是常见的几种索引:

  • 聚集索引:索引项的顺序与表中记录的物理顺序一致,叶子节点存储实际数据记录。
  • 非聚集索引:索引项的顺序与表中记录的物理顺序无关,叶子节点包含索引字段值和数据行的地址。
  • 唯一索引:不允许具有相同值的行,但可以为NULL,且不能有多个NULL。
  • 主键索引:唯一索引的特殊类型,用于标识数据库表中的每一行。

4. 索引的存储结构

在实际存储中,索引通常采用B树或B+树的结构。B树是一种m阶B树,其性质包括:

  • 根节点至少有2个孩子节点。
  • 每个节点最多含有m个孩子(m≥2)。
  • 除根节点外,其他节点至少有ceil(m/2)个孩子。
  • 所有叶子节点位于同一层。
  • 非叶子节点包含n个关键字信息,满足特定条件。

B+树是B树的变体,其特点包括:

  • 非叶子节点的子树指针与关键字个数相同。
  • 非叶子节点仅用于索引,数据存储在叶子节点。
  • 所有叶子节点均有链指针指向下一个叶子节点。

5. MyISAM索引存储机制

MyISAM引擎使用B+树作为索引结构,叶子节点的data域存放数据记录的地址。所有索引均为非聚集索引。

6. InnoDB索引存储机制

InnoDB引擎将数据文件本身作为索引文件,采用聚集索引结构。其叶子节点包含完整的数据记录,数据文件本身就是主索引。

7. 索引的优点

  • 减少扫描行数:通过定位到特定记录,减少需要访问的数据行数。
  • 支持排序和分组:索引可以用于ORDER BY和GROUP BY操作,减少临时表的使用。
  • 提升I/O效率:通过有序访问,减少磁盘读写次数。

8. 建索引的原则

  • 最左前缀匹配原则:MySQL优惠器会沿着索引的前缀匹配,直到遇到范围查询。
  • =和in操作的无序性:索引的列顺序不影响查询性能。
  • 选择度高的列:根据列的选择度高低来决定是否建立索引。
  • 避免模糊查询的索引失效:在like查询中,避免将%放在第一个位置。

9. 索引失效的情况

索引失效通常发生在以下情况:

  • 范围查询:如>、<、between、like等操作会导致索引失效。
  • 模糊查询:如like操作中第一个位置使用%。
  • 全表扫描:当查询条件不足以利用索引优势时,可能导致索引失效。

通过以上分析,可以看出索引在数据库中的重要性以及其创建和使用的注意事项。合理设计和使用索引能够显著提升数据库的查询性能,但也需要权衡存储资源和更新代价。

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

你可能感兴趣的文章
mysql的大小写对性能的影响问题
查看>>
mysql的密码管理、mysql初始密码查找、密码修改、mysql登录
查看>>
mysql的常见八股文面试题
查看>>
MySQL的常见命令
查看>>
mysql的引擎以及优缺点_MySQL有哪些存储引擎,各自的优缺点,应用场景-阿里云开发者社区...
查看>>
MySQL的操作:
查看>>
mysql的数据类型有哪些?
查看>>
MYSQL的最左匹配原则的原理讲解
查看>>
mysql的语法规范
查看>>
MySql的连接查询
查看>>
mysql的配置文件参数
查看>>
MySQL的错误:No query specified
查看>>
mysql监控工具-PMM,让你更上一层楼(上)
查看>>
mysql监控工具-PMM,让你更上一层楼(下)
查看>>
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语句,以及重点掌握存存引擎、查询(模糊查询)】
查看>>