--1.创建索引信息表
create table `t_index_update` (
`table_name` varchar(20) COLLATE gbk_bin DEFAULT NULL,
`index_name` varchar(20) COLLATE gbk_bin DEFAULT NULL,
`index_cols` varchar(100) COLLATE gbk_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin;
--2.插入线下索引信息表
insert into t_index_update()
select
table_name,
index_name,
group_concat(distinct concat('`', column_name, '`') order by seq_in_index asc separator ', ') as index_cols
from information_schema.STATISTICS
where table_schema= 'elk'
and column_name<>'seq_id'
and index_name<>'primary'
group by table_name, index_name
order by table_name asc, index_name asc;
--3.同步线下索引信息表到线上
--4.构建删除和修改过的索引的删除语句
select concat('alter table `',a.table_name,'` drop index ',a.index_name,';')
from
(
select
table_name,
index_name,
group_concat(distinct concat('`', column_name, '`') order by seq_in_index asc separator ', ') as index_cols
from information_schema.STATISTICS
where table_schema= 'elk'
and column_name<>'seq_id'
and index_name<>'primary'
group by table_name, index_name
) a
left join t_index_update b on b.table_name and b.index_name=a.index_name and b.index_cols=a.index_cols
where b.index_name is null;
--5.构建新加索引的的新加语句
select concat('alter table `',a.table_name,'` add index ',a.index_name,'(',a.index_cols,');')
from t_index_update a
left join (
select
table_name,
index_name,
group_concat(distinct concat('`', column_name, '`') order by seq_in_index asc separator ', ') as index_cols
from information_schema.STATISTICS
where table_schema= 'elk'
and column_name<>'seq_id'
and index_name<>'primary'
group by table_name, index_name
) b on b.table_name and b.index_name=a.index_name and b.index_cols=a.index_cols
where b.index_name is null;
相关文章
- 10-29如何在开发和生产环境中使用不同的META-INF / context.xml文件
- 10-29EF6的数据库迁移适用生产环境和开发环境分离,绝对是最简单的
- 10-29使用开源软件打造类似Google的开发和生产环境
- 10-29vue-cli3配置开发环境和生产环境的图片地址
- 10-29webpack之拆分开发环境和生产环境配置
- 10-29git每次发版 开发 和 生产环境的 规范化操作
- 10-29springboot配置开发环境和生产环境application.yml
- 10-29微服务上云Dockerfile编写,如何上云时将生产环境和开发环境分离并正确书写自定义启动命令
- 10-29webpack开发环境和生产环境切换原理
- 10-29vue开发环境和生产环境里面解决跨域的几种方法