You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何列出指定索引的所有条目?及INDEX COLUMNS LIST含义

如何列出指定唯一索引的所有条目 & 理解"INDEX COLUMNS LIST"

先澄清唯一索引的唯一性逻辑

你之前以为是拼接列值来校验唯一性,这是错误的。唯一索引的唯一性是基于列值组成的元组整体,举个例子:

  • 行1:col_1='a',col_2='bc'
  • 行2:col_1='ab',col_2='c'
    这两行的列值拼接后都是'abc',但作为元组('a','bc')和('ab','c')是完全不同的,唯一索引会判定它们是合法的不同条目,不会触发唯一约束冲突。

列出指定索引的所有条目

不同数据库的实现方式不一样,这里给几个主流数据库的操作方法:

MySQL/MariaDB

直接查询索引对应的列即可,因为唯一索引的条目就是这些列的唯一组合:

SELECT col_1, col_2 FROM table_test GROUP BY col_1, col_2;

如果要确认索引是否被用到,可以加EXPLAIN查看执行计划:

EXPLAIN SELECT col_1, col_2 FROM table_test GROUP BY col_1, col_2;

PostgreSQL

直接查询索引列的唯一组合,或者先查系统视图确认索引包含的列再查询:

SELECT col_1, col_2 FROM table_test GROUP BY col_1, col_2;

查询索引对应的列清单:

SELECT attname FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'table_test'::regclass AND i.indexrelid = 'index_idx'::regclass;

SQL Server

查询索引列的唯一组合:

SELECT col_1, col_2 FROM table_test GROUP BY col_1, col_2;

查询索引对应的列清单:

SELECT name AS column_name
FROM sys.index_columns ic
JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE ic.object_id = OBJECT_ID('table_test') AND ic.index_id = (SELECT index_id FROM sys.indexes WHERE object_id = OBJECT_ID('table_test') AND name = 'index_idx');

关于"INDEX COLUMNS LIST"的解释

这个词就是指某个索引所关联的所有列的清单,比如你的index_idx对应的就是col_1和col_2。数据库的系统元数据中会存储每个索引对应的列信息,查询这些系统视图/表就能得到这个清单——它的作用是让你明确这个索引是基于哪些列构建的,避免搞错索引对应的字段。

内容的提问来源于stack exchange,提问作者Aloof aloof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:25:22