2014-02-21 3 views
1

Как я могу получить столбцы, которые использует индекс таблицы, в DB2?Получить столбцы индекса в DB2

Я пробовал:

DESCRIBE INDEXES FOR TABLE 'MYTABLE' SHOW DETAIL; 

Но я получаю сообщение об ошибке

НЕЗАКОННЫЕ символ "INDEXES". НЕКОТОРЫЕ СИМВОЛЫ, КОТОРЫЕ МОГУТ БЫТЬ ЮРИДИЧЕСКИМИ: ПРОЦЕДУРА ПРОЦЕДУРЫ. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 4.16.53

В идеале я хочу получить информацию обо всех индексах, которые таблица использует с соответствующими столбцами.

Я использую DB2 для г/OS V9.1

ответ

1

Вы можете использовать этот запрос, чтобы показать индексы и их столбцы таблиц:

SELECT IX.tbname, 
     KEY.ixname, 
     KEY.colname 
FROM sysibm.syskeys KEY 
     JOIN sysibm.sysindexes IX 
     ON KEY.ixname = IX.name 
WHERE IX.tbname IN ('SOMETABLE', 'ANOTHERTABLE') 
ORDER BY IX.tbname, 
      KEY.ixname, 
      KEY.colname; 
+1

Но sysibm.syskeys таблица не существует в 9.7.x DB2 –

+0

@dmitry_bond Возможно точный ¿для DB2 LUW ?, но применимо как , «Я использую DB2 для z/OS V9.1» OP? FWiW: [«DB2 для Linux UNIX и Windows 9.7.0» AlternateZOSSysSchema Ключ конфигурации драйвера IBM Data Server: установите альтернативную схему для поиска вместо SYSIBM] (https://www.ibm.com/support/knowledgecenter/en/ SSEPGG_9.7.0/com.ibm.swg.im.dbclient.config.doc/doc/r0054599.html) и [SysSchema CLI/ODBC Config Kwd: установка альтернативной схемы для поиска вместо SYSIBM] (https: // www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.cli.doc/doc/r0008818.html) – CRPence

1
SELECT * FROM SYSIBM.SYSKEYS WHERE IXNAME IN 
(SELECT NAME FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'your_table_name') 

Я испытал его, он дает нам все столбцы, которые используются в индексах.

-1

У меня возникла проблема с использованием «KEY» в качестве псевдонима таблицы. Кроме того, если у вас есть несколько схем, с тем же именем таблицы, используйте следующее:

SELECT IX.TABLE_SCHEMA, IX.TABLE_NAME, IX.INDEX_NAME, KY.ORDINAL_POSITION, KY.COLUMN_NAME 
    FROM SYSKEYS KY 
    JOIN SYSINDEXES IX ON (KY.INDEX_NAME = IX.INDEX_NAME AND KY.INDEX_SCHEMA = IX.INDEX_SCHEMA) 
WHERE IX.TBNAME = 'table-name' AND IX.TABLE_SCHEMA = 'table-schema' 
ORDER BY IX.TABLE_SCHEMA, IX.TABLE_NAME, IX.INDEX_NAME, KY.ORDINAL_POSITION 
    FOR READ ONLY WITH UR 
Смежные вопросы