欢迎关注我的公众号(无广告、不卖课,只分享技术干货)
<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)'
);