全网最帅的77 2022-10-03 21:40 采纳率: 50%
浏览 32
已结题

mysql组合索引的问题

问题遇到的现象和发生背景

组合索引到底是什么用处,在什么场景下会用到?

  • 写回答

2条回答 默认 最新

  • 陈老老老板 奇安信开发工程师 2022-10-03 21:42
    关注

    组合索引表示在创建的索引中,包含数据表中的多个字段或列。MySQL中,同样支持在一张数据表中创建多个组合索引。在使用组合索引查询数据时,MySQL支持最左匹配原则。

    例如,创建数据表t6,并为数据表中的t_no、t_name和t_department_id字段创建复合索引。

    mysql> CREATE TABLE t6 (
    -> id INT NOT NULL,
    -> t_no VARCHAR(32) NOT NULL DEFAULT '',
    -> t_name VARCHAR(30) NOT NULL DEFAULT '',
    -> t_department_id INT NOT NULL DEFAULT 0,
    -> INDEX no_name_department_index(t_no, t_name, t_department_id)
    -> );
    Query OK, 0 rows affected (0.12 sec)
    SQL语句执行成功,查看t6数据表的表结构信息。

    mysql> SHOW CREATE TABLE t6 \G
    *************************** 1. row ***************************
    Table: t6
    Create Table: CREATE TABLE t6 (
    id int(11) NOT NULL,
    t_no varchar(32) NOT NULL DEFAULT '',
    t_name varchar(30) NOT NULL DEFAULT '',
    t_department_id int(11) NOT NULL DEFAULT '0',
    KEY no_name_department_index (t_no,t_name,t_department_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    1 row in set (0.00 sec)
    结果显示成功为t6数据表中的t_no、t_name和t_department_id字段创建了名称为no_name_department_index的复合索引。

    名称为no_name_department_index的复合索引在进行存储时,是按照t_no/t_name/t_department_id的顺序进行存放的。根据索引的最左匹配原则,当在查询数据时,使用(t_no)、(t_no,t_name)和(t_no,t_name,t_department_id)中的一种进行查询时,MySQL会使用索引。当使用(t_name)、(t_department_id)和(t_name,t_department_id)查询数据时,MySQL不会使用索引。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月12日
  • 已采纳回答 10月4日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作