Таблица конфигурации индекса AS400

Как посмотреть индекс конкретной таблицы в AS400? В какой таблице хранится описание таблицы?

3 ответа

Если ваш "индекс" действительно является логическим файлом, вы можете увидеть их список, используя:

select * from qsys2.systables
where table_schema = 'YOURLIBNAME' and table_type = 'L'

Чтобы завершить предыдущие ответы: если файлы вашего 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

Если ваши индексы создаются с использованием 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                          

Вы также можете использовать команды для получения информации. Команда DSPDBR FILE(LIBNAME/FILENAME) покажет список объектов, зависящих от физического файла. Затем объекты, которые показывают зависимость данных, могут быть дополнительно исследованы с помощью команды DSPFD FILE(LIBNAME/FILENAME). Это покажет пути доступа к логическому файлу.

Другие вопросы по тегам