Trafodion 查看表上索引及索引字段信息

昨天有人问到怎么通过SQL的方式查看表上有哪些索引、每个索引上有哪些字段,通过SQL的方式,意味着我们得需要直接从元数据表中查询。
Trafodion将所有的对象(表、索引、字段等)元数据信息保存到”MD“这个Schema下,每个对象都需要唯一的对象ID(OBJECT_ID),通过OBJECT_ID,可以在不同的元数据表中查询需要的信息。

下面这条SQL语句可以帮助我们查看所有表及表上的索引及索引字段信息,

select a.schema_name,a.object_name as table_name, c.object_name as index_name, replace(d.column_name,'@','') as  column_name
  from trafodion."_MD_".objects a, trafodion."_MD_".indexes b, trafodion."_MD_".objects c, trafodion."_MD_".columns d
 where a.object_uid = b.base_table_uid
   and b.index_uid = c.object_uid
   and c.object_uid = d.object_uid
   and a.schema_name not like '|_HV|_%%|_' escape '|'
   and a.schema_name not like '|_HB|_%%|_' escape '|'
   and a.schema_name not in ('_MD_','_PRIVMGR_MD_','_REPOS_')
   and a.schema_name not like 'VOLATILE_SCHEMA_%%'
   and d.column_name not in ('SYSKEY','_SALT_','_DIVISION_1_')
order by 1,2,3;

样例输出结果如下,

SCHEMA_NAME                                                                                                                      TABLE_NAME                                                                                                                       INDEX_NAME                                                                                                                       COLUMN_NAME                                                                                                                     
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
SEABASE                                                                                                                          AAA                                                                                                                              IDX_AAA                                                                                                                          A                                                                                                                               
SEABASE                                                                                                                          AAA                                                                                                                              IDX_AAA_2                                                                                                                        A                                                                                                                               
SEABASE                                                                                                                          BBB                                                                                                                              IDX_BBB                                                                                                                          B                                                                                                                               
SEABASE                                                                                                                          BBB                                                                                                                              IDX_BBB_1                                                                                                                        A                                                                                                                               
SEABASE                                                                                                                          BBB                                                                                                                              IDX_BBB_1                                                                                                                        B                                                                                                                               

--- 5 row(s) selected.
### 回答1: 在SQL Server中,要查看表的索引包含的字段,可以使用以下两种方法: 方法一:通过查询系统表 可以通过查询系统表sys.indexes和sys.index_columns来获取索引字段信息。具体步骤如下: 1. 首先,使用以下查询语句查询指定表的索引信息: SELECT name, type_desc, is_primary_key FROM sys.indexes WHERE object_id = OBJECT_ID('表名'); 2. 根据查询结果,找到需要查看索引的名称,假设为index_name。 3. 接下来,使用以下查询语句查看索引包含的字段信息: SELECT c.name FROM sys.index_columns AS ic JOIN sys.columns AS c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE ic.object_id = OBJECT_ID('表名') AND ic.index_id = INDEXPROPERTY(ic.object_id, 'index_name', 'indexid') ORDER BY ic.key_ordinal; 这样就可以获取索引index_name所包含的字段信息。 方法二:通过SQL Server Management Studio(SSMS)进行可视化操作 1. 打开SQL Server Management Studio(SSMS)。 2. 连接到相应的数据库,并展开数据库节点。 3. 展开表节点,找到需要查看索引字段的表,并展开表节点。 4. 展开索引节点,找到需要查看字段索引,右键单击该索引,并选择“属性”。 5. 在属性窗口中,选择“键”选项卡。 6. 在“键”选项卡中,即可查看索引包含的字段信息。 以上即是在SQL Server中查看索引包含的字段的方法。 ### 回答2: 在SQL Server中,可以使用系统视图sys.index_columns来查看索引所包含的字段。 示例代码如下: SELECT OBJECT_NAME(ic.object_id) AS 表名, ic.index_id AS 索引ID, c.name AS 字段名 FROM sys.indexes i INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE OBJECT_NAME(ic.object_id) = '表名' -- 替换为要查看的表名 ORDER BY ic.index_id, ic.key_ordinal 以上代码中,通过INNER JOIN连接了sys.indexes、sys.index_columns和sys.columns这三个系统视图来获取索引相关的信息。其中,sys.indexes包含了索引的基本信息,sys.index_columns包含了索引字段的关联关系,sys.columns包含了表中所有字段信息。 通过指定OBJECT_NAME(ic.object_id) = '表名'来确定要查看哪个表的索引信息,将'表名'替换为具体的表名即可。 查询结果将会显示表名、索引ID以及每个索引所包含的字段名。 ### 回答3: 要查看SQL Server中表索引包含的字段,可以使用以下两个系统表来查询: 1. sys.indexes:这个系统表包含了数据库中所有索引信息,可以查询索引的名称、所属的表名、索引的类型等。 2. sys.index_columns:这个系统表包含了索引中包含的列的信息,可以查询列的名称、索引的名称、列的位置等。 具体的查询步骤如下: 1. 首先,通过以下查询语句获取表的所有索引信息: SELECT name, type_desc, is_unique FROM sys.indexes WHERE object_id = OBJECT_ID('表名'); 这个查询语句会返回表的索引的名称、索引的类型(聚集索引、非聚集索引等)、索引是否是唯一的等信息。 2. 然后,通过以下查询语句获取指定索引中包含的字段信息: SELECT c.name FROM sys.indexes AS i JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id JOIN sys.columns AS c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE i.object_id = OBJECT_ID('表名') AND i.name = '索引名'; 这个查询语句会返回指定索引中所有包含的字段的名称。 需要注意的是,将上述查询语句中的"表名"替换为要查询的表名,"索引名"替换为要查询的索引名。同时,也可以将查询结果作为视图或存储过程的一部分,以便在需要的时候方便查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值