MySQL索引查看语句show index详解

news/2025/10/20 13:12:50/文章来源:https://www.cnblogs.com/ciel717/p/19133341

一、概述

SHOW INDEX语句是MySQL中用于查看表索引信息的语句。它提供了有关表中索引的详细信息,包括索引名称、索引类型、关联的列等。

二、语法与概要描述

SHOW INDEX语句的语法如下:

SHOW INDEX FROM table_name [FROM db_name] [WHERE condition];

参数说明:

  • table_name:需要查询索引的表名。
  • db_name:(可选)数据库名。如果你已经在某个数据库上下文中,可以省略此参数。
  • condition:(可选)可以添加WHERE子句来筛选索引信息,比如根据索引名称、索引类型等进行筛选。

三、字段说明

SHOW INDEX语句返回以下信息:

  • table:表名。
  • non_unique: 是否允许重复值。如果值为1,表示允许重复值;如果值为0,表示不允许重复值(唯一索引)。
  • key_name: 索引名称。主键索引名通常为PRIMARY。
  • seq_in_index: 索引中的列的序号。对于组合索引,这表示列在索引中的位置。
  • column_name: 列名,索引涉及的列。
  • collation: 排序规则。A表示升序,NULL表示不可排序。
  • cardinality: 索引的基数。这是一个估算值,表示索引中唯一值的数量。这个值对于查询优化器选择索引非常重要。
  • sub_part: 索引的前缀长度。对于部分索引,这表示索引的前缀长度。
  • packed: 索引是否被压缩。如果索引未被压缩,该列的值为NULL。
  • null: 列是否允许包含NULL值。
  • index_type: 索引类型。常见的类型有BTREE、HASH、FULLTEXT等。
  • comment: 索引的备注。

四、示例

下面是一个名为examples的表,其中包含各种类型的索引:主键索引、唯一索引、普通索引、前缀索引和联合索引。

CREATE TABLE examples (id          INT AUTO_INCREMENT,name        VARCHAR(255),description TEXT,category    VARCHAR(255),price       DECIMAL(10, 2),PRIMARY KEY (id),UNIQUE KEY idx_name (name),KEY idx_category (category),KEY idx_category_price (category, price),KEY idx_name_prefix (name(10))
) ENGINE = InnoDB;

在这个示例中,我们创建了一个名为examples的表,包含以下类型的索引:

  • 主键索引(PRIMARY KEY):id列是主键索引。主键索引要求唯一且不允许NULL值。
  • 唯一索引(UNIQUE KEY):name列是唯一索引。唯一索引要求唯一,但允许NULL值。
  • 普通索引(KEY):category列是普通索引。普通索引允许重复值和NULL值。
  • 联合索引(KEY):category和price列组成了一个联合索引。这允许根据这两个列的组合进行更快的查询。
  • 前缀索引(KEY):name列的前10个字符被用作前缀索引。前缀索引允许在索引较长的字符串列时节省存储空间和提高查询速度,但可能会影响查询准确性。

现在,使用SHOW INDEX语句查询examples表的索引信息:

SHOW INDEX FROM examples;

输出结果(以表格形式表示):

+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table    | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| examples |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     |       NULL |
| examples |          0 | idx_name           |            1 | name        | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |       NULL |
| examples |          1 | idx_category       |            1 | category    | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |       NULL |
| examples |          1 | idx_category_price |            1 | category    | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |       NULL |
| examples |          1 | idx_category_price |            2 | price       | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     |       NULL |
| examples |          1 | idx_name_price     |            1 | name        | A         |           0 |       10 |   NULL | YES  | BTREE      |         |               | YES     |       NULL |
+----------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

SHOW INDEX的输出中,你可以看到examples表的各种类型索引:

  • 主键索引(PRIMARY KEY):在key_name列中,PRIMARY关键字表示该行对应的是主键索引。non_unique列的值为0,说明主键索引的值必须是唯一的。在此例中,主键索引是id列。
  • 唯一索引(UNIQUE KEY):在key_name列中,自定义的索引名称(例如idx_name)表示这是一个唯一索引。non_unique列的值为0,说明唯一索引的值必须是唯一的,但允许NULL值。在此例中,唯一索引是name列。
  • 普通索引(KEY):在key_name列中,自定义的索引名称(例如idx_category)表示这是一个普通索引。non_unique列的值为1,说明普通索引允许重复值和NULL值。在此例中,普通索引是category列。
  • 前缀索引(KEY):前缀索引的识别方法与普通索引相同,但在sub_part列中有一个值,表示使用列值的前多少个字符作为前缀索引。在此例中,idx_name_prefix是一个前缀索引,它将name列的前10个字符作为索引。
  • 联合索引(KEY):联合索引可以通过key_name列中的相同索引名称以及不同的seq_in_index值来识别。在seq_in_index列中,数字表示列在联合索引中的顺序。在此例中,idx_category_price是一个联合索引,包括category和price两个列。在这两行中,key_name列的值都是idx_category_price,表明它们属于同一个索引。seq_in_index列的值分别为1和2,表示category和price这两个列在联合索引中的顺序。

注意,SHOW INDEX语句及返回的结果列可能会因MySQL版本的不同而有所差异。本解释基于MySQL 8.0版本。在其他版本中,返回的结果列可能有所不同。要获取与您的MySQL版本对应的详细信息,请查阅官方文档。

五、拓展

  1. 索引重复检测(SQL直接查)
-- 快速定位重复索引
SELECT table_name,GROUP_CONCAT(column_name ORDER BY seq_in_index) AS columns
FROM information_schema.statistics
WHERE table_schema = '你的数据库名'
GROUP BY table_name
HAVING COUNT(*) > 1;
  1. 索引碎片率计算
-- 计算索引碎片率(>30%建议优化)
SELECT table_name,ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb,ROUND((data_free) / 1024 / 1024, 2) AS free_mb,ROUND((data_free / (data_length + index_length + data_free)) * 100, 2) AS frag_ratio
FROM information_schema.tables
WHERE table_schema = '你的数据库名'
AND data_free > 0;
  1. 强制更新统计信息
-- 解决Cardinality不准问题
ANALYZE TABLE user;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qzmoot 生活合集

qzmoot 生活合集欣赏穿蛋侠; 摸彭云; 跳缩小版《我是奶龙》。

yocto工程升级要点

需求 原有的工程是多年前基于yocto sumo开发,对应的linux kernel版本是4.14。 需求是要求linux kernel升级到5.10。 背景 工程由以下几部分组成,yocto sumo构建部分的代码,包括poky,bitbake等 目标平台支持多款第三…

微信机器人开发API!3步搞定微信聊天机器人

微信机器人开发API!3步搞定微信聊天机器人 WTAPI框架是一个能将个人微信各项功能提取成可供开发人员调用的一套私有API接口,比如微信的收发消息,发朋友圈,群聊,建群等等都是可以用API接口来做的。你可以用 微信机…

详细介绍:【Linux】Linux管道与进程池深度解析:从原理到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

windows2019的域控服务器更新时间.251020

1 先找到合适的源 w32tm /stripchart /computer:ntp.aliyun.com #若是可以使用会显示如下图2 注册表配置确****保NTP客户端已启用:确认以下注册表路径的 E nabled 值为 1: HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo…

国内DOH解析速度测试(阿里 腾讯 360 Doh测速)

阿里 腾讯 360 Doh测速以前一直用阿里DOH,上个月开始明显感觉网页打开速度异常慢,怀疑是阿里DOH限速,验证过程如下: 测试工具:Python3.14 aiohttp matplotlib numpy dnspython 库 地理位置:阳江(距离省会偏远的落后城市…

WatchAlert 轻量级AI日志告警 - Docker安装部署

💎 WatchAlert 是什么? 🎯 专注可观测性与稳定性,为运维提效降本 WatchAlert 是一款专为云原生环境设计 的轻量级监控告警引擎,聚焦于可观测性(Metrics、Logs、Traces)与系统稳定性保障,提供从采集、分析到告…

2022ICPC区域赛济南站

补题链接QOJ:The 2022 ICPC Asia Jinan Regional Contest - Dashboard - Contest - QOJ.ac K. Stack Sort 思路:考虑 a 需要比 a+1 先出栈,所以如果读到 a,发现 a+1 还没被记录则需要多建一个栈。 void solve() {i…

java代码和c++代码相互调用的技术方案

java代码和c++代码相互调用的技术方案通过JNI桥接方式

详细介绍:MyBatis动态sql

详细介绍:MyBatis动态sql2025-10-20 12:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

计算机毕业设计PySpark+Hadoop+Hive+LSTM模型美团大众点评分析+评分预测 美食推荐环境(源码+论文+PPT+讲解视频)

计算机毕业设计PySpark+Hadoop+Hive+LSTM模型美团大众点评分析+评分预测 美食推荐环境(源码+论文+PPT+讲解视频)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

对话智能体泛化研究在线挑战启动

某中心推出DialoGLUE对话AI挑战赛,旨在推动任务型对话系统泛化能力研究。该挑战提供标准化数据集和基准模型,涵盖意图识别、槽位填充等四大任务,支持全数据与少样本两种评估模式。某中心启动在线挑战赛推动对话智能…

2025.10.20

t1 Baekjoon 21527 给定 \(n\times n\) 矩阵 \(a\),对于 \((i,j)\) 求 \((1,1)\) 到 \((n,n)\) 最短路径上与 \(a_{i,j}\) 相同数的个数的最大值。 唐氏症题。 每种 \(a\) 单独提出来,\(f_{i,j}\) 为 \((i,j)\) 的答…

Unable to register MBean [SftpPool

org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [SftpPool [maxTotal=8, blockWhenExhausted=true, maxWaitMillis=-1, lifo=true, fairness=false, testOnCreate=false, …

利用Python写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

def lens5():while True:msg = input(请选择你想输入的数字类型,输入对应序号即可>>>1.字符串 2.列表 3.元组:)if msg.isdecimal():if int(msg) == 1:s = input(请开始的你的字符串输入:)print(len(s) > 5…

请求

请求HTTP请求方法中GET和POST的主要区别。 (1)参数位置:GET 请求的参数附加在 URL 后面,POST 请求的参数包含在请求体中。 (2)长度限制:GET 请求受 URL 长度限制,POST 请求没有明确的长度限制。 (3)安全性:…

sp681网卡打驱动后的状态--默认是链路是down

[root@localhost home]# ll总用量 1240-rw-r--r-- 1 root root 119260 10月 20 12:21 NIC-Hi1822-KylinV10SP3-2403-hinic3-17.7.7.1-aarch64.rpm-rw-r--r-- 1 root root 952296 10月 20 12:21 NIC-Hi1822-KylinV10SP3…

麒麟和win10双系统出现时间差异的问题

麒麟和win10双系统出现时间差异的问题win10安装openkylin双系统,进麒麟系统后再进win10,时间会出现8小时的误差,最简单的解决办法是在麒麟系统执行如下命令就可以了sudo timedatectl set-local-rtc 1

dlc — Docker Log Cleaner(支持名称、ID前缀、交互序号清理,模糊匹配交互确认)

一键安装脚本:curl -L -o /usr/local/bin/dlc https://files-cdn.cnblogs.com/files/nihaorz/dlc.sh && chmod +x /usr/local/bin/dlc#!/bin/bash stty erase ^H 2>/dev/null # dlc — Docker Log Cleaner…

软件研发项目管理提效方案|流程驱动 数据赋能:打造上下游信息透明的研发项目管理新模式

在软件研发中,流程不清、协作割裂往往是效率的最大障碍。本文探讨了一种全新的产研管理模式:以流程为核心驱动跨部门协作,通过数字化平台打通产品、研发、测试与运维,实现从需求到交付的全流程可视化与高效协同。行…