2

如何查看 AS400 中特定表的索引?表的索引描述存储在哪个表中?

4

4 回答 4

2

要完成前面的答案:如果您的 AS400/IBMi 文件是“IBM 的旧样式”物理和逻辑文件,则 qsys2.syskeys 和 qsys2.sysindexes 为空。

==> 您在QADBKFLD(用于“索引”信息)和QADBXREF(用于字段列表)表中检索索引信息

select * from QSYS.QADBXREF where DBXFIL = 'YOUR_LOGICAL_FILE_NAME' and DBXLIB = 'YOUR_LIBRARY' 

select * from QSYS.QADBKFLD  where DBKFIL = 'YOUR_LOGICAL_FILE_NAME' and DBKLB2 = 'YOUR_LIBRARY' 

警告:YOUR_LOGICAL_FILE_NAME 不是您的“表名”,而是文件名!您必须加入另一个表QSYS.QADBFDEP以匹配 LOGICAL_FILE_NAME / TABLE_NAME :

从你的表名中找到索引:

Select r.*
from QSYS.QADBXREF r, QSYS.QADBFDEP d 
where  d.DBFFDP = r.DBXFIL and d.DBFLIB=r.DBXLIB 
  and d.DBFFIL =  'YOUR_TABLE_NAME' and d.DBFLIB = 'YOUR_LIBRARY' 

要从您的表中找到所有索引的字段:

Select DBXFIL , f.DBKFLD, DBKPOS , t.DBXUNQ 
from QSYS.QADBXREF t 
  INNER JOIN QSYS.QADBKFLD  f on DBXFIL = DBKFIL and DBXLIB = DBKLIB 
  INNER JOIN QSYS.QADBFDEP d on d.DBFFDP = t.DBXFIL and d.DBFLIB=t.DBXLIB 
  where d.DBFFIL =  'YOUR_TABLE_NAME' and d.DBFLIB = 'YOUR_LIBRARY' 
order by DBXFIL, DBKPOS
于 2019-11-06T14:50:43.993 回答
2

如果您的“索引”确实是一个逻辑文件,您可以使用以下命令查看这些列表:

select * from qsys2.systables
where table_schema = 'YOURLIBNAME' and table_type = 'L'
于 2016-10-21T16:57:38.867 回答
1

如果您的索引是使用 SQL 创建的,您可以在 sysindexes 系统视图中看到索引列表

  SELECT * FROM qsys2.sysindexes WHERE TABLE_SCHEMA='YOURLIBNAME' and 
  TABLE_NAME = 'YOURTABLENAME'

如果您想要索引的详细列,您可以加入 syskeys 表

  SELECT KEYS.INDEX_NAME, KEYS.COLUMN_NAME     
  FROM   qsys2.syskeys KEYS                    
  JOIN qsys2.sysindexes IX ON KEYS.ixname = IX.name            
  WHERE  TABLE_SCHEMA='YOURLIBNAME' and TABLE_NAME = 'YOURTABLENAME'             
  order by INDEX_NAME                          
于 2016-10-21T08:40:39.200 回答
0

您还可以使用命令来获取信息。命令 DSPDBR FILE(LIBNAME/FILENAME) 将显示依赖于物理文件的对象列表。然后可以通过运行 DSPFD FILE(LIBNAME/FILENAME) 进一步探索显示数据依赖性的对象。这将显示逻辑文件的访问路径。

于 2016-10-24T13:33:47.817 回答