MySQL索引

索引是提升MySQL数据检索效率的关键,包括单列索引、唯一索引、主键索引、组合索引和全文索引等类型。B-Tree和B+Tree是常见的索引数据结构,其中B+Tree在范围查询中表现出色。聚集索引在InnoDB引擎中,数据存储于索引的叶子节点,而非聚集索引在MyISAM引擎中,索引和数据分开存储。
摘要由CSDN通过智能技术生成

概念

索引是帮助MySQL高效的获取数据的排序好数据结构,索引具有的特点:通过数据结构算法来对原始数据进行有效的组织,通过有效的组织,可以引导使用者对原始数据进行快速检索

索引类型

单列索引

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

普通索引

MySQL中基本索引类型,没什么限制,允许在定义索引的列中插入重复值和空值,目的就是为了更快速查询数据。

唯一索引

索引列中的值必须是唯一的,但是允许为空值。

主键索引

是一种特殊的唯一索引,不允许为空值,主键约束就是一个主键索引。

组合索引

使用表中的多个字段组合上创建索引,使用组合索引时需遵循最左前缀匹配索引才会生效。

全文索引

全文索引只有在MyISAM存储引擎上才能使用,只能在charvarchartext类型字段上使用全文索引。使用全文索引在存储的一堆文字数据中,通过其中的某个关键字就能找到该字段所属的记录行。

索引数据结构

B-Tree

B-Tree数据存储采用key-value的方式存储,key为bigint类型8个字节,每个节点有两个指针,每个指针为4个字节,所以一个节点占用的存储空间为16字节, 具有的特点:

  • 叶子节点具有相同的深度,叶节点的指针为空

  • 所有的索引元数不重复

  • 节点中的数据索引从左到右递增排序

B-Tree不支持范围查询的快速查找,在范围查找查询到一个数据后,接下来的查询还需要回到根节点重新遍历。

B+Tree

B+Tree时B-Tree的变种,B+Tree的数据存储在叶子节点上。B+Tree具有的特点:

  • 非叶子节点不存储数据,只存储索引(冗余),可以存放更多的索引

  • 叶子节点包含所有索引字段

  • 叶子节点用指针连接,提供区间访问的性能

  • B+Tree中检索数据时,每次检索都是从根节点开始,一致搜索到匹配的叶子节点

索引分类

聚集索引

聚集索引:InnoDB引擎实现,每个表右且一定会有一个聚集索引,整个表的数据存储在聚集索引的叶子节点上,非叶子节点存储记录的主键值,当表中为指定主键时,MySQL内部会自动给每条记录添加一个隐藏的rowid(默认4个字节)作为主键,使用rowid构建聚集索引。

非聚集索引

非聚集索引(辅助索引):MyISAM引擎实现,也是B+Tree结构,不过有一点和聚集索引不同,非聚集索引叶子节点存储字段(索引字段)的值及对应记录主键的值,其他节点只存储所以字段值。

MySQL索引是一种数据结构,可以帮助MySQL快速定位和访问表中的数据。使用索引可以提高查询效率,降低数据库的负载。下面是MySQL索引的一些基本概念和使用方法: 1. 索引类型 MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,B树索引是最常用的一种,也是默认的索引类型。B树索引可以用于精确匹配和范围查询,而哈希索引主要用于等值查询,全文索引则用于文本检索。 2. 索引创建 可以在创建表时指定索引,例如: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), INDEX idx_email (email) ); ``` 也可以在已有的表上添加索引,例如: ``` ALTER TABLE users ADD INDEX idx_name (name); ``` 3. 索引使用 查询语句中可以使用WHERE子句和ORDER BY子句来利用索引,例如: ``` SELECT * FROM users WHERE email = 'example@example.com'; SELECT * FROM users WHERE name LIKE 'John%' ORDER BY id DESC; ``` 需要注意的是,索引并不是越多越好,过多的索引会占用过多的磁盘空间并降低写操作的性能。因此,需要根据实际情况选择合适的索引。同时,还需要定期对索引进行维护,包括优化查询语句、删除不必要的索引等。 4. 索引优化 MySQL提供了一些工具来优化索引,例如EXPLAIN命令可以帮助分析查询语句的执行计划,找出慢查询和不必要的全表扫描。可以使用OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。还可以使用缓存来避免频繁的查询操作,例如使用Memcached或Redis等缓存工具。 以上就是MySQL索引的一些基本概念和使用方法,需要根据实际情况进行选择和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值