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

/* 一、

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

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

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

*

* 参数说明:

* 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)'

);

你可能感兴趣的:(mysql判断索引是否存在,不存在则创建)