如何在AS400中查看特定表的索引?表中存储了表的索引描述?
答案 0 :(得分:2)
如果您的“索引”实际上是一个逻辑文件,您可以使用以下命令查看这些文件的列表:
select * from qsys2.systables
where table_schema = 'YOURLIBNAME' and table_type = 'L'
答案 1 :(得分:1)
如果使用SQL创建索引,则可以在sysindexes系统视图中看到index的索引
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
答案 2 :(得分:1)
要完成先前的答案:如果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
答案 3 :(得分:0)
您还可以使用命令获取信息。命令DSPDBR FILE(LIBNAME / FILENAME)将显示依赖于物理文件的对象列表。然后,可以通过运行DSPFD FILE(LIBNAME / FILENAME)来进一步探索显示数据依赖性的对象。这将显示逻辑文件的访问路径。