iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql可不可以创建联合索引
  • 364
分享到

mysql可不可以创建联合索引

2024-04-02 19:04:59 364人浏览 泡泡鱼
摘要

这篇文章主要介绍“Mysql可不可以创建联合索引”,在日常操作中,相信很多人在mysql可不可以创建联合索引问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql可不可以创

这篇文章主要介绍“Mysql可不可以创建联合索引”,在日常操作中,相信很多人在mysql可不可以创建联合索引问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql可不可以创建联合索引”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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_name
WHERE
    c1 = v1;
 
 
SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2;
 
 
SELECT  
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c2 = v2 AND 
    c3 = v3;

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

SELECT
    *
FROM
    table_name
WHERE
    c1 = v1 AND 
    c3 = v3;

MySQL联合索引示例

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

mysql可不可以创建联合索引

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

CREATE INDEX name 
ON employees(lastName, firstName);
  • 首先,name索引可用于指定lastName值的查询中的查找,因为lastName列是索引的最左前缀。

  • 其次,name索引可用于指定lastName和firstName值组合的值的查询。

name索引用于在以下的查询查找:

1)查找姓氏为的员工 Patterson

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

此查询使用名称索引,因为索引的最左边前缀(即lastName列)用于查找。

您可以通过EXPLAIN在查询中添加子句来验证这一点:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson';

这是输出:

mysql可不可以创建联合索引

2)查找姓氏Patterson和名字的员工Steve:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

在此查询中,两个lastName和firstName列都用于查找,因此,它使用name索引。

我们来核实一下:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    firstName = 'Steve';

输出是:

mysql可不可以创建联合索引

3)查找姓氏Patterson和名字是Steve或的员工Mary:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

此查询类似于第二个查询,其中两个lastName和firstName列都用于查找。

以下语句验证索引用法:

EXPLAIN SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    lastName = 'Patterson' AND
    (firstName = 'Steve' OR 
    firstName = 'Mary');

输出是:

mysql可不可以创建联合索引

查询优化器不能在以下查询中使用name索引进行查找,因为只使用了firstName不是索引最左前缀的列:

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Leslie';

类似地,查询优化器不能在以下查询中使用名称索引进行查找,因为firstName或者lastName列用于查找。

SELECT 
    firstName, 
    lastName, 
    email
FROM
    employees
WHERE
    firstName = 'Anthony' OR
    lastName = 'Steve';

到此,关于“mysql可不可以创建联合索引”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql可不可以创建联合索引

本文链接: https://www.lsjlt.com/news/73434.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql可不可以创建联合索引
    这篇文章主要介绍“mysql可不可以创建联合索引”,在日常操作中,相信很多人在mysql可不可以创建联合索引问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql可不可以创...
    99+
    2024-04-02
  • MYSQL创建联合索引
    在创建表的时候即指定联合索引,例如 -- 如果存在表,则删除DROP TABLE IF EXISTS core_fund_shares -- 创建表CREATE TABLE `core_fund_shares` ( `fund_code`...
    99+
    2023-08-30
    mysql 数据库
  • mysql怎么创建联合索引
    在MySQL中,可以使用CREATE INDEX语句来创建联合索引。 创建联合索引的语法如下: CREATE INDEX index...
    99+
    2024-02-29
    mysql
  • pgsql怎么创建联合索引
    在 PostgreSQL 中,可以使用 `CREATE INDEX` 语句来创建联合索引。联合索引是指在多个列上创建的索引,可以同时...
    99+
    2023-10-27
    pgsql
  • MySQL创建组合索引
    大家都知道索引是用来优化的主要因素,对于少量数据索引的影响并不大,对于几十万或百万级别以上数据的时候,单列索引的性能也不是很理想,组合索引可以大大的减少开销。 一、创建组合索引的方法 1、sql语句: ALTER TABLE `table_...
    99+
    2023-08-31
    mysql创建组合索引 mysql组合索引
  • mysql创建联合索引的方法是什么
    在 MySQL 中创建联合索引的方法是使用 CREATE INDEX 语句。 语法如下: CREATE INDEX index_na...
    99+
    2024-04-09
    mysql
  • SpringDataJpa创建联合索引的实现
    目录SpringDataJpa创建联合索引创建联合索引对应类创建映射实体类添加新数据SpringDataJpa指定联合索引在@Table中指定UniqueConstraint自动加上...
    99+
    2024-04-02
  • Spring DataJpa如何创建联合索引
    本篇内容主要讲解“Spring DataJpa如何创建联合索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring DataJpa如何创建联合索引”吧!SpringDataJpa创建联合索...
    99+
    2023-06-22
  • 12C如何创建不可见索引自测
    这篇文章将为大家详细讲解有关12C如何创建不可见索引自测,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SQL> create tab...
    99+
    2024-04-02
  • mysql创建联合索引要注意哪些事项
    创建联合索引时,需要注意以下事项: 联合索引包含多个字段,字段的顺序会影响查询性能。一般来说,将最经常用于查询的字段放在索引的前...
    99+
    2024-04-09
    mysql
  • linux可不可以创建多个进程
    这篇“linux可不可以创建多个进程”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linu...
    99+
    2023-02-07
    linux
  • mysql索引可以分为几种
    这篇文章将为大家详细讲解有关mysql索引可以分为几种,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql索引有哪些1、主键索引:主键索引是一种特殊的唯一索引,不允许...
    99+
    2024-04-02
  • mysql复合索引如何创建
    在MySQL中,可以使用CREATE INDEX语句来创建复合索引。复合索引是基于多个列的索引,可以提高查询性能。 创建复合索引的语...
    99+
    2023-10-28
    mysql
  • 怎么创建联合索引的sql语句
    要创建联合索引,你需要使用CREATE INDEX语句,并在索引名称后面列出要包含在索引中的列名列表。以下是一个示例SQL语句来创建...
    99+
    2023-10-12
    sql
  • linux可不可以mbr引导
    这篇文章主要讲解了“linux可不可以mbr引导”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux可不可以mbr引导”吧! ...
    99+
    2023-03-01
    linux mbr
  • mysql创建索引
    mysql创建索引?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!分为五种索引方式:1.添加PRIMARY KEY(主键索引...
    99+
    2024-04-02
  • mysql联合索引详解
    比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。 b+tree结构如下: 每一个磁盘块在mysql中是一个页,页大小是固定的,mysql innodb的默认的页大小是16k,每个索引会...
    99+
    2023-09-02
    mysql 数据库 sql
  • mysql什么时候可以使用索引
    这篇文章主要介绍mysql什么时候可以使用索引,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!            &nb...
    99+
    2024-04-02
  • mysql可以查询表中的索引吗
    mysql可以查询表中的索引,实现方式有:1、DESC指令,显示表的结构信息,包括索引,命令示例“DESC 表名;”;2、SHOW INDEX指令,展示表的索引信息,命令示例“SHOW INDEX FROM 表名”;3、INFORMATIO...
    99+
    2023-07-25
  • es6可不可以用双引号
    这篇文章主要介绍“es6可不可以用双引号”,在日常操作中,相信很多人在es6可不可以用双引号问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6可不可以用双引号”的疑惑有所帮...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作