/* 一、
* 安全创建索引的存储过程:
* 首先判断索引是否存在,如果已经存在则不创建,如果不存在,则创建。
* 防止索引已经存在,创建出错和删除索引重复创建原来的索引带来的开销浪费
*
* 参数说明:
* 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)' );