数据库中的索引虽然可以大大提升查询的性能,但是大量冗余的索引和没使用的索引不仅会导致DML性能降低,而且会造成空间的浪费。Oracle中可以通过索引跟踪的方法来监控哪些索引是没被使用的,同样在pg中我们可以使用下面两个脚本来对索引进行监控。
1、监控没被使用的索引
```sql
SELECT
PSUI.indexrelid::regclass AS IndexName
,PSUI.relid::regclass AS TableName
FROM pg_stat_user_indexes AS PSUI
JOIN pg_index AS PI
ON PSUI.IndexRelid = PI.IndexRelid
WHERE PSUI.idx_scan = 0
AND PI.indisunique IS FALSE;
2、监控列上重复的索引
由于pg中允许在同一个列创建多个索引,而大部分情况下都是不需要的。
SELECT
indrelid::regclass AS TableName
,array_agg(indexrelid::regclass) AS Indexes
FROM pg_index
GROUP BY
indrelid
,indkey
HAVING COUNT(*) > 1;