Détecter les index inutilisés
Oracle
-- Start monitoring:
ALTER INDEX customer_city_idx MONITORING USAGE;
-- Check after a while (12c+, all schemas):
SELECT owner, index_name, used FROM dba_object_usage;Si USED = NO, l'index n'a pas été utilisé pendant la période de surveillance. Désactivez la surveillance avec NOMONITORING USAGE. L'ancienne v$object_usage n'affiche que les index de l'utilisateur de la session et est dépréciée depuis 12c. En 12.2+, l'utilisation des index est suivie automatiquement dans DBA_INDEX_USAGE.
PostgreSQL
SELECT relname AS table, indexrelname AS index, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
ORDER BY relname;idx_scan = 0 signifie que l'index n'a pas été utilisé depuis la dernière réinitialisation des statistiques ; ne supprimez pas les index UNIQUE/PK.
MySQL
SELECT * FROM sys.schema_unused_indexes;performance_schema doit être activé et le serveur doit tourner depuis un certain temps ; les contraintes UNIQUE sont exclues.
SQL Server
SELECT OBJECT_NAME(i.object_id) AS table_name, i.name AS index_name
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s
ON i.object_id = s.object_id AND i.index_id = s.index_id
AND s.database_id = DB_ID()
WHERE i.type_desc = 'NONCLUSTERED'
AND COALESCE(s.user_seeks + s.user_scans + s.user_lookups, 0) = 0;usage_stats est réinitialisé au redémarrage du serveur ; prévoyez une fenêtre d'observation suffisante.
MongoDB
db.customer.aggregate([{ $indexStats: {} }])
// Indexes with low/0 accesses.ops are candidatesaccesses.ops compte les accès depuis l'horodatage accesses.since ; l'index _id ne peut pas être supprimé.
Redis
# Not applicable: core Redis has no secondary indexes.
# If the RediSearch module is used, check statistics with FT.INFO <index>.Le modèle de données étant clé-valeur, il n'existe pas de notion d'index traditionnelle.