孟斌

1. 什么是索引

索引是一种用于提高数据库查询性能的数据结构,它类似于书籍的目录,可以帮助数据库快速地定位到数据记录。索引通常是一个单独的数据结构,存储了某个列或多个列的值与对应数据行的物理存储位置之间的映射关系。

在数据库中,当执行查询语句时,如果没有索引支持,数据库系统可能需要逐行扫描整个表来找到满足查询条件的数据,这会消耗大量的时间和资源。而通过使用索引,数据库系统可以快速定位到满足查询条件的数据行,从而大大提高查询性能。

在MySQL中,索引的实现方式有两种:Hash和B+Tree。

2. 索引的分类

索引通常是在表的某个列或多个列上创建的,常见的索引类型包括:

3. 索引的优缺点

使用索引,可以:

尽管索引有以上的优点,但索引的使用也会导致:

4. 索引的使用场景

索引是数据库中用于提高查询性能的重要工具,可以在多种场景下发挥作用。下面是一些常见的索引使用场景:

  1. 频繁查询的列:对于经常被查询的列,特别是在WHEREORDER BYGROUP BYJOIN等操作中使用的列,可以考虑创建索引。通过为这些列创建索引,可以加速相关查询的执行,提高查询性能。
  2. 唯一性约束的列:对于需要确保唯一性约束的列,如主键列或唯一约束列,通常需要创建唯一索引。唯一索引可以确保索引列中的值是唯一的,从而保证数据的完整性和一致性。
  3. 外键关联的列:对于外键关联的列,通常需要创建索引以提高查询性能。外键列经常用于关联多个表之间的数据,通过为外键列创建索引,可以加速关联查询的执行。
  4. 范围查询的列:对于需要进行范围查询的列,如日期范围、数值范围等,可以考虑创建索引。索引可以加速范围查询的执行,提高查询效率。
  5. 经常使用的列:对于经常被查询的列,无论是单列查询还是组合查询,都可以考虑创建索引。通过为这些列创建索引,可以加速相关查询的执行,提高系统的响应速度。
  6. 连接操作的列:对于经常用于连接操作的列,如JOIN操作中的连接列,可以考虑创建索引。索引可以加速连接操作的执行,减少连接操作的时间开销。
  7. 全文搜索的列:对于需要进行全文搜索的列,可以考虑创建全文索引。全文索引可以加速全文搜索操作的执行,提高搜索效率。

除了上面的提及的,创建索引的列的必须拥有较高的区分度,区分度越高,索引的查询效率就越高。例如在设计存放个人信息的数据表时,使用手机号或者身份证号作为索引的会比使用姓名的查询效率高很多,因为全国范围内手机号和身份证号都是唯一的,但重名的概率会很高。

5. 操作示例

-- 查看当前表中的索引
SHOW INDEX FROM t_student;

-- 创建索引
CREATE INDEX idx_name ON t_student(name);

-- 查询索引是否生效
EXPLAIN SELECT * FROM t_student WHERE `name` = 'zhangsan';

-- 删除索引
DROP INDEX idx_name ON t_student;

-- 创建唯一索引
CREATE UNIQUE INDEX idx_card_no ON t_student(card_no);

-- 创建主键索引
ALTER TABLE t_student ADD PRIMARY KEY(id);

/*
	创建组合索引
	当查询时需要将多列组合起来进行查询时可以考虑创建组合索引;
	创建时应将区分度高的列放在前面;
    最左匹配原则是组合索引优化的核心原则之一,它指的是在使用组合索引进行查询时,查询条件中的列必须从索引的最左侧列开始,按照创建索引时的顺序逐一匹配。
    只有在查询条件中使用了索引的最左侧列,索引才能被利用。
*/
CREATE INDEX idx_name_city ON t_student(name,city);

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特