分库分表情况下添加索引
遇到的问题:分库分表情况下可能好几百张表,可以使用存储过程来新建索引。实现方式如下

1 /*新建存储过程:给库.表的字段添加索引*/ 2 delimiter $$ 3 /*创建带参存储过程 dbName库名称;tablePrefixName表名称前缀;minTableNumber表最小序号;maxTableNumber表最大序号;indexName索引名称;indexValue索引列*/ 4 create PROCEDURE add_index_while_procure(IN dbPrefixName VARCHAR(50),IN tablePrefixName VARCHAR(50),IN minTableNumber INT,IN maxTableNumber INT,IN indexName varchar(50),IN indexValue varchar(200)) 5 BEGIN 6 declare table_name_number int; 7 8 set table_name_number=minTableNumber; 9 while(table_name_number<=maxTableNumber) DO 10 /*添加索引语句*/ 11 set @STMT :=CONCAT("alter table ",dbPrefixName,".",tablePrefixName,table_name_number," ADD index " ,indexName," ",indexValue,";"); 12 /*输出执行语句*/ 13 select @STMT; 14 prepare STMT FROM @STMT; 15 EXECUTE STMT; 16 17 set table_name_number=table_name_number+1; 18 end while; 19 END 20 $$ 21 delimiter;

1 /*调用存储过程 所有子表及主表 2 ALTER TABLE manager.tableName ADD INDEX idx_station_time (STATION_CODE, TIME) USING BTREE ; 3 */ 4 call add_index_while_procure("manager","tableName_",1906,1912,"idx_code_time","(CODE, TIME)");
/*查看存储过程*/ show procedure status; show create procedure add_index_while_procure;

/*存在则删除存储过程*/ drop procedure if EXISTS add_index_while_procure;

1 /*新建存储过程:删除给库.表的字段索引*/ 2 delimiter $$ 3 /*创建带参存储过程 dbName库名称;tablePrefixName表名称前缀;minTableNumber表最小序号;maxTableNumber表最大序号;indexName索引名称;indexValue索引列*/ 4 create PROCEDURE drop_index_while_procure(IN dbPrefixName VARCHAR(50),IN tablePrefixName VARCHAR(50),IN minTableNumber INT,IN maxTableNumber INT,IN indexName varchar(50)) 5 BEGIN 6 declare table_name_number int; 7 8 set table_name_number=minTableNumber; 9 while(table_name_number<=maxTableNumber) DO 10 /*添加索引语句*/ 11 set @STMT :=CONCAT("alter table ",dbPrefixName,".",tablePrefixName,table_name_number," DROP index " ,indexName,";"); 12 /*输出执行语句*/ 13 select @STMT; 14 prepare STMT FROM @STMT; 15 EXECUTE STMT; 16 17 set table_name_number=table_name_number+1; 18 end while; 19 END 20 $$ 21 delimiter;

1 /*调用存储过程 所有子表及主表 2 ALTER TABLE manager.tableName DROP INDEX idx_station_time; 3 */ 4 call drop_index_while_procure("manager","tableName_",1906,1912,"idx_station_time");
参考:
https://blog.csdn.net/qq_23132561/article/details/100888454
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了