开发者社区> 问答> 正文

如何排查存在前缀字段相同的多个复合索引?

如何排查存在前缀字段相同的多个复合索引?

展开
收起
花开富贵111 2024-07-24 18:33:04 28 0
1 条回答
写回答
取消 提交回答
  • 为了排查存在前缀字段相同的多个复合索引,可以使用以下SQL查询。这个查询会检查同一表上的索引,并确定哪些索引的键字段(indkey)是另一个索引键字段的子集。如果multi_index1是multi_index2的子集,则前者可能是冗余的。

    SELECT idx1.indrelid::regclass, idx1.indexrelid::regclass, string_to_array(idx1.indkey::text, ' ') AS multi_index1, 
    string_to_array(idx2.indkey::text, ' ') AS multi_index2, idx2.indexrelid::regclass 
    FROM pg_index idx1, pg_index idx2 
    WHERE idx1.indrelid = idx2.indrelid 
    AND idx1.indexrelid != idx2.indexrelid 
    AND idx1.indnatts > 1 
    AND string_to_array(idx1.indkey::text, ' ') <@ string_to_array(idx2.indkey::text, ' ');
    

    以下是排查例子user_t上复合问题的索引,如下:image.png
    以下是查询结果image.png
    以上例子结果解释:multi_index1是multi_index2的子集,前者的索引列已经在后者中做了索引,因此,multi_index1属于冗余索引。

    2024-07-24 20:05:36
    赞同 3 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载