mysql组合索引的问题

问题遇到的现象和发生背景

组合索引到底是什么用处,在什么场景下会用到?

组合索引表示在创建的索引中,包含数据表中的多个字段或列。MySQL中,同样支持在一张数据表中创建多个组合索引。在使用组合索引查询数据时,MySQL支持最左匹配原则。

例如,创建数据表t6,并为数据表中的t_no、t_name和t_department_id字段创建复合索引。

mysql> CREATE TABLE t6 (
-> id INT NOT NULL,
-> t_no VARCHAR(32) NOT NULL DEFAULT '',
-> t_name VARCHAR(30) NOT NULL DEFAULT '',
-> t_department_id INT NOT NULL DEFAULT 0,
-> INDEX no_name_department_index(t_no, t_name, t_department_id)
-> );
Query OK, 0 rows affected (0.12 sec)
SQL语句执行成功,查看t6数据表的表结构信息。

mysql> SHOW CREATE TABLE t6 \G
*************************** 1. row ***************************
Table: t6
Create Table: CREATE TABLE t6 (
id int(11) NOT NULL,
t_no varchar(32) NOT NULL DEFAULT '',
t_name varchar(30) NOT NULL DEFAULT '',
t_department_id int(11) NOT NULL DEFAULT '0',
KEY no_name_department_index (t_no,t_name,t_department_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
结果显示成功为t6数据表中的t_no、t_name和t_department_id字段创建了名称为no_name_department_index的复合索引。

名称为no_name_department_index的复合索引在进行存储时,是按照t_no/t_name/t_department_id的顺序进行存放的。根据索引的最左匹配原则,当在查询数据时,使用(t_no)、(t_no,t_name)和(t_no,t_name,t_department_id)中的一种进行查询时,MySQL会使用索引。当使用(t_name)、(t_department_id)和(t_name,t_department_id)查询数据时,MySQL不会使用索引。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^