当前位置: 首页 > MySQL数据库

mysql可不可以创建联合索引

时间:2026-01-27 10:39:30

mysql可以创建联合索引。MySQL允许用户创建一个最多包含16列的联合索引,创建方法有两个:1、创建表时创建,语法“CREATE TABLE 表名 (列名1 类型 PRIMARY KEY,列名2 类型,列名3 类型,...INDEX 索引名 (列名2,列名3...));”;2、修改表时创建,语法“CREATE INDEX 索引名 ON 表名(列名2,列名3,列名4);”。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

什么是联合索引?联合索引的本质:最左匹配

两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。MySQL允许用户创建一个最多包含16列的复合索引。

对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。

例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

查询优化器将复合索引用于测试索引中所有列的查询,或者测试第一列,前两列等的查询。

如果在索引定义中以正确的顺序指定列,则单个复合索引可以在同一个表上加速这些类型的查询。

创建表时创建联合索引

语法:

CREATE TABLE 表名 (    c1 data_type PRIMARY KEY,    c2 data_type,    c3 data_type,    c4 data_type,    INDEX 索引名 (c2,c3,c4));

在此语法中,联合索引由三列c2,c3和c4组成。

修改表时创建联合索引

可以使用以下CREATE INDEX语句将复合索引添加到现有表:

CREATE INDEX 索引名 ON 表名(c2,c3,c4);

请注意,如果您在(c1,c2,c3)上有复合索引,则您将在以下列组合之一上建立索引搜索功能:

(c1)(c1,c2)(c1,c2,c3)

例如:

SELECT    *FROM    table_nameWHERE    c1 = v1;  SELECT    *FROM    table_nameWHERE    c1 = v1 AND     c2 = v2;  SELECT      *FROM    table_nameWHERE    c1 = v1 AND     c2 = v2 AND     c3 = v3;

如果列不形成索引的最左前缀,则查询优化器无法使用索引执行查找。例如,以下查询无法使用复合进行查找:

SELECT    *FROM    table_nameWHERE    c1 = v1 AND     c3 = v3;

MySQL联合索引示例

我们将使用示例数据库中的employees表进行演示。

以下语句在lastName和firstName列上创建联合索引:

CREATE INDEX name ON employees(lastName, firstName);
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素