MySQL存储过程----创建索引前,先判断索引是否已经存在,如果存在,则不添加,如果不存在,添加

 

欢迎关注我的公众号(无广告、不卖课,只分享技术干货)

在这里插入图片描述

<pre name="code" class="sql">USE xxx_db;

/* 一、
 * 安全创建索引的存储过程:
 * 首先判断索引是否存在,如果已经存在则不创建,如果不存在,则创建。
 * 防止索引已经存在,创建出错和删除索引重复创建原来的索引带来的开销浪费
 * 
 * 参数说明:
 * p_dbname : 数据库名称
 * p_tablename : 表名称
 * p_idxname : 索引名称
 * p_index : 索引名称和结构,比如在 name(name) 
 * 
 * 举例:比如想要在数据库xxx_db的tablename这张表的字段column1和column2创建联合索引idx_c1c2,则如下:
 * call add_index('xxx_db','tablename','idx_c1c2','idx_c1c2(column1,column2)')
 */
DROP PROCEDURE
IF EXISTS add_Index;
delimiter //
CREATE PROCEDURE add_Index (
	IN p_dbname VARCHAR (200),
	IN p_tablename VARCHAR (200),
	IN p_idxname VARCHAR (200),
	IN p_index VARCHAR (200)
)
BEGIN
	DECLARE
		str VARCHAR (250);

SET @str = concat(
	' ALTER TABLE ',
	p_tablename,
	' ADD INDEX ',
	p_index
);

SELECT
	count(*) INTO @cnt
FROM
	information_schema.statistics
WHERE
	TABLE_SCHEMA = p_dbname
AND table_name = p_tablename
AND index_name = p_idxname;

IF @cnt <= 0 THEN
	PREPARE stmt FROM 	@str;
  EXECUTE stmt;
END
IF;

END;
//
delimiter ;

/* 为my_db的mytable表创建组合索引mytable_idxc1c2(c1,c2)优化查询速度 
 *  
 * */
CALL add_Index (
	'my_db',
	'mytable',
	'mytable_idexc1c2',
	'mytable_idexc1c2(c1,c2)'
);

 

 

 

 

 

 
 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值