DBeaver原生支持右键查看索引,但需注意数据库类型与权限限制;图形界面显示索引名称、类型、字段及顺序等基础信息,而MySQL需用SHOW INDEX、PostgreSQL用\d或pg_indexes、DB2需联查SYSCAT.INDEXES与INDEXCOLUSE获取完整定义。

直接看索引详情,不用写 SQL —— DBeaver 原生支持右键展开查,但必须注意数据库类型和权限限制。
右键表 → “索引” 标签页能看什么
在 DBeaver 左侧导航树中,展开数据库连接 → 找到目标表 → 右键点击该表 → 选择“查看” → “索引”,即可打开索引列表页。这个界面默认显示:
-
INDEX_NAME、TYPE(如 BTREE / HASH / UNIQUE)、COLUMN_NAME(含顺序 ASC/DESC 标记) - 是否为主键索引(
INDISPRIMARY字段在 PostgreSQL 中体现;MySQL 显示为Primary Key类型) - 是否唯一(
UNIQUERULE = 'U'或INDISUNIQUE = true) - 索引所在
TABLESPACE(如 PostgreSQL 的pg_default,Oracle 的USERS)
⚠️ 注意:DB2 和 Oracle 需要用户有访问 SYSCAT.INDEXES 或 ALL_INDEXES 视图的权限,否则“索引”标签页为空或报错 ORA-00942: table or view does not exist。
MySQL 的 SHOW INDEX 语句仍最可靠
DBeaver 的图形化索引页有时不显示字段排序方向(ASC/DESC)、表达式索引内容或前缀长度(如 name(10))。此时建议手动执行原生命令:
SHOW INDEX FROM `orders`;
返回结果中关键列含义:
-
Seq_in_index:字段在索引中的顺序位置 -
Collation:A表示 ASC,D表示 DESC,NULL表示无序(如哈希索引) -
Sub_part:前缀索引长度(如值为10表示只索引前 10 个字符) -
Index_comment:索引备注(部分 MySQL 版本支持)
? 提示:在 DBeaver 的 SQL 编辑器中执行该语句后,右键结果集 → “复制为 CSV”,可快速导出结构用于比对。
PostgreSQL 查索引定义要用 \d 或系统表
DBeaver 图形界面不展示索引的完整 CREATE INDEX 语句,而 \d 表名 是最简方式:
\d t_student
它会列出所有索引及其字段、排序、是否唯一、是否包含 NULL 值等。若需程序化查询(比如批量检查),用系统表更可控:
SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 't_student';
⚠️ 注意:pg_indexes.indexdef 返回的是建索引语句文本,但不含 CONCURRENTLY 或 WHERE 条件子句(这些信息存在 pg_index 的 indpred 字段里,需额外解析)。
DB2 索引字段顺序和升/降序得查 SYSCAT.INDEXCOLUSE
DBeaver 的“索引”页对 DB2 仅显示名称和类型,COLNAMES 字段在 SYSCAT.INDEXES 中是紧凑编码格式(如 +NAME -AGE +EMAIL),无法直接读。必须联查:
SELECT i.INDNAME, i.UNIQUERULE, c.COLNAME, c.COLSEQ, c.ORDERING FROM SYSCAT.INDEXES i JOIN SYSCAT.INDEXCOLUSE c ON i.INDNAME = c.INDNAME AND i.TABNAME = c.TABNAME WHERE i.TABNAME = 'ORDERS' ORDER BY c.COLSEQ;
其中 c.ORDERING 值为 A(ASC)、D(DESC)、I(include 列)——这是唯一能准确还原 DB2 索引定义的方式。
复杂点在于:DB2 的聚簇索引(CLUSTER)和统计信息是否最新,会影响优化器是否真正使用该索引,而 DBeaver 不提供 runstats 执行入口,这点容易被忽略。


















