您的位置:首页 > 数据库 > MySQL

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

2014-04-14 18:40 1741 查看
/* 一、

* 安全创建索引的存储过程:

* 首先判断索引是否存在,如果已经存在则不创建,如果不存在,则创建。

* 防止索引已经存在,创建出错和删除索引重复创建原来的索引带来的开销浪费

*

* 参数说明:

* 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)'
);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐