MySQL联合索引遵循最左前缀匹配原则

MySQL联合索引采用最左前缀匹配原则,即查询条件从左至右匹配索引中的字段。

深入理解MySQL联合索引的最左前缀匹配原则

在MySQL数据库中,联合索引是一种非常重要的索引类型,可以有效地提高查询性能,很多开发者在创建和使用联合索引时,往往忽视了最左前缀匹配原则,导致索引效果不佳,本文将详细讲解MySQL联合索引的最左前缀匹配原则,并通过实例进行分析,帮助大家更好地理解和应用这一原则。

MySQL联合索引遵循最左前缀匹配原则

联合索引简介

联合索引,又称复合索引,是指在一个索引定义中包含多个列的索引,与单一索引相比,联合索引可以覆盖更多的查询场景,提高查询性能。

创建联合索引的语法如下:

CREATE INDEX index_name ON table_name (column1, column2, ...);

index_name表示索引名称,table_name表示表名称,column1, column2, ...表示组成联合索引的列。

最左前缀匹配原则

最左前缀匹配原则是指在使用联合索引进行查询时,遵循从左到右的顺序使用索引列,具体来说,以下几种情况会触发最左前缀匹配:

1、查询条件包含联合索引的所有列。

对于以下联合索引:

CREATE INDEX idx_user_age_name ON user (age, name);

以下查询会触发最左前缀匹配:

SELECT * FROM user WHERE age = 30 AND name = 'zhangsan';

2、查询条件包含联合索引的前缀列。

SELECT * FROM user WHERE age = 30;

3、查询条件包含联合索引的前缀列,并且后续列有范围查询。

SELECT * FROM user WHERE age = 30 AND name LIKE 'zhangsan%';

以下情况不会触发最左前缀匹配:

1、查询条件不包含联合索引的最左列。

SELECT * FROM user WHERE name = 'zhangsan';

2、查询条件包含联合索引的列,但顺序与索引定义不一致。

MySQL联合索引遵循最左前缀匹配原则

SELECT * FROM user WHERE name = 'zhangsan' AND age = 30;

实例分析

为了更好地理解最左前缀匹配原则,我们通过以下实例进行分析。

1、创建测试表

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    age INT,
    name VARCHAR(50),
    address VARCHAR(100)
);

2、创建联合索引

CREATE INDEX idx_user_age_name ON user (age, name);

3、插入测试数据

INSERT INTO user (age, name, address) VALUES (20, 'zhangsan', '北京');
INSERT INTO user (age, name, address) VALUES (30, 'lisi', '上海');
INSERT INTO user (age, name, address) VALUES (30, 'zhaowu', '广州');
INSERT INTO user (age, name, address) VALUES (40, 'zhangsan', '深圳');

4、查询分析

(1)查询条件包含联合索引的所有列

EXPLAIN SELECT * FROM user WHERE age = 30 AND name = 'zhaowu';

查询计划如下:

id  select_type  table  type  possible_keys  key  key_len  ref  rows  filtered  Extra
1   SIMPLE       user   ref   idx_user_age_name  idx_user_age_name  76  const,const  1   100.00  Using index

从查询计划可以看出,MySQL使用了联合索引idx_user_age_name,并且使用了最左前缀匹配。

(2)查询条件包含联合索引的前缀列

EXPLAIN SELECT * FROM user WHERE age = 30;

查询计划如下:

id  select_type  table  type  possible_keys  key  key_len  ref  rows  filtered  Extra
1   SIMPLE       user   ref   idx_user_age_name  idx_user_age_name  5   const  3   33.33  Using index condition

从查询计划可以看出,MySQL使用了联合索引idx_user_age_name的前缀列,即age列。

(3)查询条件包含联合索引的前缀列,并且后续列有范围查询

MySQL联合索引遵循最左前缀匹配原则

EXPLAIN SELECT * FROM user WHERE age = 30 AND name LIKE 'zhangsan%';

查询计划如下:

id  select_type  table  type  possible_keys  key  key_len  ref  rows  filtered  Extra
1   SIMPLE       user   range  idx_user_age_name  idx_user_age_name  76  NULL  1   25.00  Using index condition

从查询计划可以看出,MySQL使用了联合索引idx_user_age_name的前缀列,并且对后续列name进行了范围查询。

(4)查询条件不包含联合索引的最左列

EXPLAIN SELECT * FROM user WHERE name = 'zhangsan';

查询计划如下:

id  select_type  table  type  possible_keys  key  key_len  ref  rows  filtered  Extra
1   SIMPLE       user   ALL   NULL  NULL  NULL  NULL  4   25.00  Using where

从查询计划可以看出,MySQL没有使用联合索引idx_user_age_name,而是进行了全表扫描。

本文详细介绍了MySQL联合索引的最左前缀匹配原则,并通过实例进行了分析,在实际开发中,我们需要遵循以下原则:

1、创建联合索引时,应按照查询条件中出现频率和过滤效果的优先级来确定索引列的顺序。

2、使用联合索引进行查询时,应确保查询条件包含联合索引的最左列,以提高查询性能。

3、避免创建不必要的联合索引,以免增加数据库的维护成本。

掌握最左前缀匹配原则,可以帮助我们更好地优化MySQL查询性能,提高数据库的整体效率。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/322767.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2024-02-18 19:02
Next 2024-02-18 19:06

相关推荐

  • mysql复杂查询示例

    MYSQL复杂查询练习题以及答案大全(难度适中)MYSQL是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的功能和灵活的查询语言,使得我们可以轻松地进行复杂的数据操作,在实际应用中,我们经常会遇到一些复杂的查询需求,需要使用到MYSQL的各种高级特性和技巧,本文将为大家提供一些难度适中的MYSQL复杂查询练习题,并给出详细的解答……

    2024-03-04
    0173
  • centos7 删除服务

    删除MySQL服务前的准备工作在删除MySQL服务之前,请确保您已经备份了所有重要的数据,因为删除服务会导致数据丢失,还需要确保没有其他用户正在使用MySQL服务,如果您不确定,可以先停止MySQL服务,然后再进行删除操作。删除MySQL服务的步骤1、停止MySQL服务在删除MySQL服务之前,需要先停止正在运行的MySQL服务,可以……

    2024-01-11
    0230
  • spark连接mysql数据库后怎么使用

    使用Spark连接MySQL数据库后,可以通过读取数据、执行查询、写入数据等方式进行操作。

    2024-05-21
    0131
  • html下拉面板(html下拉页面)

    好久不见,今天给各位带来的是html下拉面板,文章中也会对html下拉页面进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!html下拉菜单代码怎么写select !-- 下拉菜单选项将在这里添加 --/select 在select标签之间,添加option标签来定义每个选项。保存好html文件后使用浏览器打开,即可看到效果。如图:所有代码。可直接把所有代码复制到html文件上运行即可看到效果。

    2023-12-08
    0170
  • MySql统计函数COUNT的具体使用详解

    MySQL是一个关系型数据库管理系统,它提供了许多内置的统计函数,其中COUNT函数是最常用的一个,COUNT函数用于计算表中记录的数量,可以统计行数、列数等,本文将详细介绍COUNT函数的具体使用方法。COUNT函数的基本语法COUNT函数的基本语法如下:SELECT COUNT(column_name) FROM table_na……

    2024-03-12
    0113
  • linux重装mysql要注意哪些事项

    备份数据,选择合适的版本,修改配置文件,安装依赖库,检查端口和权限,启动服务并设置开机自启。

    2024-05-17
    0108

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入