总结
最近的工作需要升级数据库,特别是使用工具迁移数据库,我个人认为一致性是第一位的,可是工具在迁移的时候,会自身为了加速运行会偷偷摸摸建立很多索引,因此要对比索引是否建立多了,是否重复了,业务上已经有了,是不是就不用建立了,整理之后开源出来,方便大家使用
工具
pg-duplicate-key-checker工具思路来源于是Percona Toolkit工具集的其中一个(pt-duplicate-key-checker),主要用于读取数据库表及索引对比,因PostgreSQL的特殊性,实现方法上还是有点不同的,
pg-duplicate-key-checker目前主要读取数据库pg_class/pg_index/pg_namespace/pg_attribute视图排除主键号唯一索引(这两个索引是确定了业务的唯一性)可以不用关注
主要是使用到的算法
1. 前缀匹配 2. 排序 3. 长度比较
案例讲解
人工
某一个表的索引是这个样子(排除唯一索引与主键)
程序
第一步排序,有没有发现问题呢,删除前面三个就可以了
程序核心逻辑
for (size_t i = 0; i < data.size(); ++i) {
bool isRedundantRow = false;
for (size_t j = 0; j < data.size(); ++j) {
if (i != j && isRedundant(data[i], data[j])) {
isRedundantRow = true;
break;
}
}
if (!isRedundantRow && find(result.begin(), result.end(), data[i]) == result.end()) {
result.push_back(data[i]);
}
}
文章转载自SmallDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




