Comment trouver tous les index disponibles sur table dans db2?
db2 "select * from syscat.indexes where tabname = 'your table name here' \
and tabschema = 'your schema name here'"
Vous pouvez également exécuter:
DESCRIBE INDEXES FOR TABLE SCHEMA.TABLE SHOW DETAIL
Vous pouvez obtenir les détails des index avec la commande ci-dessous.
describe indexes for table schemaname.tablename show detail
Cela dépend de la version de DB2 que vous utilisez. Nous avons la v7r1m0 et la requête suivante fonctionne assez bien.
WITH IndexCTE (Schema, Table, Unique, Name, Type, Columns) AS
(SELECT i.table_schema, i.Table_Name, i.Is_Unique,
s.Index_Name, s.Index_Type, s.column_names
FROM qsys2.SysIndexes i
INNER JOIN qsys2.SysTableIndexStat s
ON i.table_schema = s.table_schema
and i.table_name = s.table_name
and i.index_name = s.index_name)
SELECT *
FROM IndexCTE
WHERE schema = 'LIBDEK'
AND table = 'ECOMROUT'
Si vous n'êtes pas familier avec les CTE, ils méritent d'être connus. Nos conventions de nommage AS400 sont affreuses, donc je me sers des CTE pour normaliser les noms de champs. J'ai fini par créer une bibliothèque de CTE et l'ai ajoutée automatiquement en haut de toutes mes requêtes.
Pour voir tous les index: -
select * from user_objects
where object_type='INDEX'
Pour voir l'index et ses colonnes sur la table:
select * from USER_IND_COLUMNS where TABLE_NAME='my_table'
Une autre méthode consiste à générer le DDL de la table. Il vous donnera la description complète de la table, y compris l’index.
Juste un clic droit sur la table et cliquez sur générer DDL/Scripts.
Fonctionne sur la plupart de la base de données.
Pour vérifier les index d'une table sur IBM Db2 on Cloud (auparavant DashDb), la requête suivante doit le faire:
SELECT * FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema'
Vous pouvez aussi utiliser check by name:
SELECT COUNT(*) FROM SYSCAT.INDEXES WHERE TABNAME = 'my_tablename' AND TABSCHEMA = 'my_table_schema' AND INDNAME='index_name'
Le même résultat peut être obtenu en utilisant SYSIBM.SYSINDEXES. Cependant, cette table n'est pas référencée directement sur la page de documentation du produit.
SELECT COUNT(*) FROM SYSIBM.SYSINDEXES WHERE TBNAME = 'my_tablename' AND TBCREATOR = 'my_table_schema' AND NAME='my_index_name'
Voir Vue catalogue SYSCAT.INDEXES .