MySQL索引

MySQL索引

MySQL的索引底层全部是B+树

表名:user

id(auto increment)PKnameagesex
1a20
2b21
3c22
4d23
5e24

 一、InnoDB引擎

根据物理结构区分

聚簇索引

B+树中叶子节点存储的是当前主键id对应行的全部数据,并且叶子节点是双向链表,可以用于范围查询

非聚簇索引

叶子节点存储的是当前索引对应的列值和聚簇索引的值(一般就是主键id)

在age列上面建非聚簇索引

alter table user add index index_age(age);

根据索引列数区分

单列索引

 在age列上面建非聚簇索引

alter table user add index index_age(age);

联合索引

在多个列上面建索引

对name和age建立联合索引:alter table user add index index_age_name(name, age);

对于联合索引来说,先根据name进行排序,在name有序的情况下根据age排序,所以衍生出了最左前缀匹配原则,where中必须包含联合索引的第一个列,才可以使用该联合索引

因为如果没有name,那么age就不能保证有序(虽然这里举的例子,在name没有的时候,age也有序,但是这个属于特例,并且没有name,也不能使用index_age_name索引)

按照特征区分

主键索引(not null, unique, auto increment)

一般使用自增整型作为主键

不使用UUID作为主键的原因:①主键默认是聚簇索引,存储的时候是按照顺序排的,UUID是乱序的,在插入的时候会导致频繁的分页;②UUID所占的内存对比整型来说要更大,所以对相同高度的B+树来说,使用UUID作为主键,存储的数据更少;同时,如果对数据量相同的数据进行存储,那么UUID的树会更高,就意味着查询同一个数据,UUID作为主键的索引需要更多次数的磁盘IO

唯一索引(unique)

可以为空,但是必须保证值是唯一的

普通索引

在普通字段上面建立的索引,不要求非空,也不要求唯一

二、MyISAM存储引擎

只有非聚簇索引,没有聚簇索引,并且非聚簇索引的叶子节点直接存储的是当前行数据存储的物理地址

三、索引为什么使用B+树

哈希索引

只适合等值查询,根据查询条件进行哈希,直接进行定位,在等值查询的时候很快;但是不适合范围查询

B树索引

特点:所有节点里面都存储数据,查找的时间复杂度不确定

因为每一个节点都存储数据,所以在相等高度下的B树和B+树来说,B+树可以存储的数据更多;

并且如果存储的是等量的数据,B+树的高度要小于B树,在查找数据的时候来说,B+树的磁盘IO次数小于B树

总结

B+树存储大量数据的时候,树的高度可控,也就是磁盘IO的次数可控;并且叶子节点在上层都有冗余,所以在删除的时候,需要调整的范围可控

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、付费专栏及课程。

余额充值