检查列是否已编制索引 - MySql

时间:2011-11-20 17:54:27

标签: mysql stored-procedures indexing

我需要编写一个脚本来检查列是否在其所属的表中编入索引,如果没有,则为其添加索引。 MySQL似乎没有ADD INDEX IF NOT EXISTS

在MySQL中执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

请参阅http://dev.mysql.com/doc/refman/5.1/en/create-index.html

有一个存储过程可以执行此操作(请记住,不是我的代码,只是 谷歌首次点击mysql add index if not exists作为搜索字符串。)

DELIMITER $$
DROP PROCEDURE IF EXISTS `create_index_if_not_exists`$$

CREATE DEFINER=`user`@`%` PROCEDURE `create_index_if_not_exists`(table_name_vc varchar(50), index_name_vc varchar(50), field_list_vc varchar(200))
SQL SECURITY INVOKER
BEGIN

set @Index_cnt = (
select  count(1) cnt
FROM    INFORMATION_SCHEMA.STATISTICS
WHERE   table_name = table_name_vc
and index_name = index_name_vc
);

IF ifnull(@Index_cnt,0) = 0 THEN set @index_sql = concat('Alter table ',table_name_vc,' ADD INDEX ',index_name_vc,'(',field_list_vc,');');

PREPARE stmt FROM @index_sql;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;

END IF;

END$$
DELIMITER ;

在同一页面下方有一个替代版本。

答案 1 :(得分:1)

也许这可以帮助你:

SHOW INDEX FROM my_table WHERE Key_name = 'index_to_check';