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

Firebird数据库所有索引查询:获取含关联表与列的SQL语句

查询Firebird数据库所有索引及其关联表与列的SQL语句

你可以通过Firebird内置的系统表组合查询,获取所有索引的关联表、对应列等详细信息,以下是可用的SQL语句:

SELECT
    TRIM(i.RDB$INDEX_NAME) AS INDEX_NAME,
    TRIM(i.RDB$RELATION_NAME) AS TABLE_NAME,
    TRIM(s.RDB$FIELD_NAME) AS COLUMN_NAME,
    s.RDB$FIELD_POSITION AS COLUMN_POSITION
FROM
    RDB$INDEXES i
JOIN
    RDB$INDEX_SEGMENTS s ON i.RDB$INDEX_NAME = s.RDB$INDEX_NAME
LEFT JOIN
    RDB$RELATION_FIELDS f ON s.RDB$FIELD_NAME = f.RDB$FIELD_NAME AND i.RDB$RELATION_NAME = f.RDB$RELATION_NAME
ORDER BY
    TABLE_NAME, INDEX_NAME, COLUMN_POSITION;

语句说明:

  • RDB$INDEXES:存储所有索引的基础元数据,包含索引名称、关联表名等核心信息
  • RDB$INDEX_SEGMENTS:记录索引包含的列,以及列在索引中的排序位置
  • TRIM():去除系统字段默认带的空格,让输出结果更整洁
  • COLUMN_POSITION:显示列在索引中的顺序,方便理解索引的结构

如果需要仅查看用户自定义索引(排除Firebird自带的以RDB$开头的系统索引),可以添加过滤条件:

SELECT
    TRIM(i.RDB$INDEX_NAME) AS INDEX_NAME,
    TRIM(i.RDB$RELATION_NAME) AS TABLE_NAME,
    TRIM(s.RDB$FIELD_NAME) AS COLUMN_NAME,
    s.RDB$FIELD_POSITION AS COLUMN_POSITION
FROM
    RDB$INDEXES i
JOIN
    RDB$INDEX_SEGMENTS s ON i.RDB$INDEX_NAME = s.RDB$INDEX_NAME
LEFT JOIN
    RDB$RELATION_FIELDS f ON s.RDB$FIELD_NAME = f.RDB$FIELD_NAME AND i.RDB$RELATION_NAME = f.RDB$RELATION_NAME
WHERE
    i.RDB$INDEX_NAME NOT LIKE 'RDB$%'
ORDER BY
    TABLE_NAME, INDEX_NAME, COLUMN_POSITION;

执行后返回的结果会和你在DBWorkbench中看到的索引数量匹配,清晰展示每个索引对应的表和列信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:59:59