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
相关产品推荐
相关产品推荐

