全网最帅的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日

悬赏问题

  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app