Multiple-Column Indexes

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: MySQL 支持创建复合索引(多列索引),最多由 16 列组成,适用于查询中所有或部分列的查找。复合索引如同排序数组,通过连接索引列值创建。正确排列的单个复合索引能加速多种查询。若索引列非最左侧前缀,MySQL 无法使用索引查找。此外,还可引入基于其他列信息“哈希”的列作为替代方案,提高查询效率。

MySQL可以创建复合索引(即多列上的索引)。索引最多可由16列组成。对于某些数据类型,您可以为列的前缀建立索引。
MySQL可以将多列索引用于测试索引中所有列的查询,也可以用于仅测试第一列、前两列、前三列等的查询。如果在索引定义中按正确的顺序指定列,则单个复合索引可以加速同一表上的多种查询。
多列索引可以被视为一个排序数组,其行包含通过连接索引列的值而创建的值。

作为复合索引的替代方案,您可以引入一个基于其他列的信息“哈希”的列。如果此列很短,具有合理的唯一性,并且有索引,那么它可能比许多列上的“宽”索引更快。在MySQL中,很容易使用这个额外的列:
image.png

假设一个表具有以下规格:
image.png

名称索引是last_name和first_name列上的索引。该索引可用于查询中的查找,这些查询指定了last_name和first_name值组合的已知范围内的值。它也可以用于仅指定last_name值的查询,因为该列是索引的最左侧前缀(如本节稍后所述)。因此,名称索引用于以下查询中的查找:

image.png

但是,名称索引不用于以下查询中的查找:

image.png

假设您发出以下SELECT语句:

image.png

834/10000
实时翻译
划译
如果col1和col2上存在多列索引,则可以直接获取相应的行。如果col1和col2上存在单独的单列索引,优化器会尝试使用索引合并优化(见第8.2.1.3节“索引合并优化”),或者尝试通过决定哪个索引排除更多行并使用该索引来获取行,从而找到限制性最强的索引。
如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀来查找行。例如,如果你在(col1,col2,col3)上有一个三列索引,那么你在(coll1)、(col1、col2)和(col1)、col2、col3上都有索引搜索功能。
如果列不构成索引的最左侧前缀,MySQL就无法使用索引执行查找。假设您有如下所示的SELECT语句:

image.png

如果(col1,col2,col3)上存在索引,则只有前两个查询使用该索引。第三和第四个查询确实涉及索引列,但不使用索引来执行查找,因为(col2)和(col2,col3)不是(col1,col2,col3)的最左侧前缀。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
250 59
|
2月前
|
存储 关系型数据库 MySQL
Column Indexes
常见的索引类型通过复制列值至高效数据结构(如B树),实现快速查找。B树助力WHERE子句中=、>、≤、BETWEEN等运算符对应值的检索。每表至少支持16个索引,总长不少于256字节,具体限制依存储引擎而定。字符串列索引可指定前N字符,减少索引文件大小;BLOB或TEXT列索引需指定前缀长度。全文索引用于全文搜索,适用于InnoDB和MyISAM引擎的CHAR、VARCHAR、TEXT列;空间索引则针对空间数据类型,MyISAM和InnoDB采用R树索引。MEMORY引擎默认使用HASH索引,也支持BTREE索引。
|
12月前
|
数据库
解决which is not functionally dependent on columns in GROUP BY clause;...sql_mode=only_full_group_by
解决which is not functionally dependent on columns in GROUP BY clause;...sql_mode=only_full_group_by
245 0
|
数据库
Field ‘id‘ doesn‘t have a default value
Field ‘id‘ doesn‘t have a default value
165 0
|
数据库
Incorrect table definition; there can be only one auto column and it must be defined as a key
Incorrect table definition; there can be only one auto column and it must be defined as a key
175 0
Incorrect table definition; there can be only one auto column and it must be defined as a key
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
202 0
1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause
|
SQL 关系型数据库 MySQL
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT
|
关系型数据库 MySQL
1293 - Incorrect table definition; there can be only oneTIMESTAMP column with CURRENT_TIMESTAMP
一个表中出现多个timestamp并设置其中一个为current_timestamp的时候经常会遇到 1293 - Incorrect table definition; there can be only oneTIME...
2466 0
|
SQL 存储 数据库

热门文章

最新文章

  • 1
    2024Mysql And Redis基础与进阶操作系列(6)作者——LJS[含MySQL 多表之一对一/多;多对多;多表联合查询等详解步骤及常见报错问题所对应的解决方法]
    6
  • 2
    2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
    5
  • 3
    2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
    6
  • 4
    2024Mysql And Redis基础与进阶操作系列(4-1)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
    5
  • 5
    2024Mysql And Redis基础与进阶操作系列(3-2)作者——LJS[含MySQL用户,权限,角色管理;举例说明详解步骤及常见报错问题对应的解决方法]
    6
  • 6
    2024Mysql And Redis基础与进阶操作系列(3-1)作者——LJS[含MySQL用户,权限,角色管理;举例说明详解步骤及常见报错问题对应的解决方法]
    7
  • 7
    2024Mysql And Redis基础与进阶操作系列(2)作者——LJS[含MySQL登录;DDL;DML;举例说明;编码等详解步骤及常见报错问题对应的解决方法]
    9
  • 8
    2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
    9
  • 9
    2024年护网行动全国各地面试题汇总(5)
    17
  • 10
    2024年护网行动全国各地面试题汇总(4)作者:————LJS
    21