验证Mysql中联合索引的最左匹配原则详情

当我们在 Mysql 数据库中创建联合索引时,会发现联合索引的查询效率远高于单属性索引,尤其在多条件筛选的情况下。联合索引的查询方式遵循最左匹配原则,即第一列在查询条件中的值确定,才会再考虑第二列的值。

验证 Mysql 中联合索引的最左匹配原则,可以按照以下步骤:

  1. 创建测试数据表

我们可以通过以下语句来创建一个测试数据表:

CREATE TABLE test_table (
  id INT UNSIGNED NOT NULL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age TINYINT UNSIGNED NOT NULL,
  gender ENUM('M','F') NOT NULL,
  INDEX idx_demo (name, age, gender)
);

在这个测试数据表中,我们创建了一个名为 idx_demo 的联合索引,包含三个列 name、age、gender。

  1. 插入测试数据

为了验证联合索引的最左匹配原则,我们需要插入一些测试数据。我们可以按照以下语句插入数据:

INSERT INTO test_table (id, name, age, gender) VALUES
  (1, 'Tom', 18, 'M'),
  (2, 'Jerry', 20, 'M'),
  (3, 'Lucy', 22, 'F'),
  (4, 'Lily', 18, 'F'),
  (5, 'Tom', 22, 'F'),
  (6, 'Jerry', 18, 'F');
  1. 查询演示

接下来,我们可以通过以下语句对数据表进行查询,验证联合索引的最左匹配原则。

3.1. 验证最左匹配原则

EXPLAIN SELECT * FROM test_table WHERE name = 'Tom' AND age = 18;

运行以上语句后,我们可以看到查询结果如下:

+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------+
| id | select_type | table      | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                             |
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------+
|  1 | SIMPLE      | test_table | NULL       | ref  | idx_demo      | idx_demo | 152     | const | 2    |   100.00 | Using index condition; Using where; Using filesort |
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------------------------+

我们可以看到查询结果中 type 字段为 ref,表示使用了索引,key 字段为 idx_demo,表示使用了 idx_demo 联合索引,key_len 字段为 152,表示查询时使用的为前两列 name 和 age 的字符长度之和,ref 字段为 const,表示实际查询的元素为常量,rows 字段为 2,表示查询结果的数量。

3.2. 验证多列查询

EXPLAIN SELECT * FROM test_table WHERE age = 18 AND gender = 'F';

运行以上语句后,我们可以看到查询结果如下:

+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------------+
| id | select_type | table      | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | test_table | NULL       | ref  | idx_demo      | idx_demo | 153     | const | 1    |   100.00 | Using index condition |
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+-----------------------+

我们可以看到查询结果中的 type 字段为 ref,表示使用了索引,key 字段为 idx_demo,表示使用了 idx_demo 联合索引,key_len 字段为 153,表示查询时使用的为前三列 name、age 和 gender 的字符长度之和,ref 字段为 const,表示实际查询的元素为常量,rows 字段为 1,表示查询结果的数量。

通过以上两个示例,我们可以验证 Mysql 中联合索引的最左匹配原则,同时了解联合索引在多条件筛选时的高效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:验证Mysql中联合索引的最左匹配原则详情 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • oracle数据库添加或删除一列的sql语句

    当需要向已有的Oracle数据库表中添加一列或删除一列的时候,我们可以使用以下的SQL语句。 添加一列 语法 ALTER TABLE table_name ADD (column_name column_type); 参数说明 table_name:要添加列的表名称 column_name:要添加的列名称 column_type:要添加的列的数据类型 示例 …

    database 2023年5月21日
    00
  • sql优化实战 把full join改为left join +union all(从5分钟降为10秒)

    SQL优化是提高数据库性能的重要手段之一,本文将详细讲解如何通过将FULL JOIN改为LEFT JOIN + UNION ALL的方式,将查询时间从5分钟降为10秒。 什么是FULL JOIN? FULL JOIN是一种关联查询方式,它会返回左右两个表中所有的记录,即使没有匹配的记录也会被显示出来。在SQL语句中,FULL JOIN可以通过“FULL OU…

    database 2023年5月19日
    00
  • fedora8 下mysql 安装的安装方法

    下面是“Fedora 8下MySQL安装的安装方法”的完整攻略: 安装前准备 在进行MySQL安装之前,需要先安装一些必要的软件和依赖项,执行以下命令: sudo dnf install -y wget ncurses-devel 下载安装包 下载MySQL安装包,可以在MySQL官网下载:https://dev.mysql.com/downloads/my…

    database 2023年5月22日
    00
  • SQL 计算比重

    SQL计算比重通常需要使用GROUP BY语句。以下是详细的攻略,包含两个实例。 1. 使用COUNT函数计算比重 COUNT函数用于计算某个列或表中的行数。可以将其与GROUP BY语句结合使用,以计算每个分组中的行数或所占比重。 1.1 情景分析 假设你有一张销售订单表,该表中包含以下列:order_id, customer_id, product_id…

    database 2023年3月27日
    00
  • CentOS7 + node.js + nginx + MySQL搭建服务器全过程

    下面我将为您详细讲解如何搭建“CentOS7 + node.js + nginx + MySQL”的服务器。 第一步:CentOS7系统的安装 下载CentOS7系统的ISO镜像文件; 制作启动盘并安装CentOS7系统; 配置网络。 第二步:安装node.js 使用yum命令安装epel-release仓库: sudo yum install epel-r…

    database 2023年5月22日
    00
  • 分页技术原理与实现之Java+Oracle代码实现分页(二)

    分页技术的主要原理是对数据库中的数据进行切割,将数据分成多个页面进行展示。而Java和Oracle的结合能够很好地实现分页技术,本文主要讲解Java+Oracle代码实现分页的方法。 代码实现分页方法 在Java+Oracle代码实现分页中,我们需要进行以下几个步骤: 1. 定义分页函数 我们需要定义一个函数,这个函数的主要作用是获取需要展示的数据,同时对数…

    database 2023年5月21日
    00
  • MongoDB固定集合使用方法详解(详细步骤)

    什么是MongoDB固定集合? MongoDB固定集合是一种特殊的集合,它的大小是固定的,当达到限定大小时,它会覆盖旧的数据。这样可以很好的控制数据的大小,避免数据过度增长引起服务器的瓶颈和性能问题。 创建MongoDB固定集合 要创建MongoDB固定集合,需要在创建集合时指定集合的大小及存储引擎。可以使用以下代码创建MongoDB固定集合: db.cre…

    MongoDB 2023年3月14日
    00
  • PHP如何初始化PDO及原始SQL语句操作

    下面是PHP如何初始化PDO及原始SQL语句操作的完整攻略以及两个示例说明。 初始化PDO 使用PDO连接MySQL需要以下步骤: 首先创建一个PDO对象,并传入数据库连接信息。 try { $pdo = new PDO(‘mysql:host=localhost;dbname=mydatabase;charset=utf8’, ‘username’, ‘p…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部