MySQL数据库批量导出索引脚本

项目迭代长了之后,生产环境和测试环境创建的索引可能存在不一致情况,需要分别导出来进行比对,补全缺失的索引。网上好多文章的脚本执行都有问题,下面这个脚本亲测通过,大家可放心使用。

SELECT 
    CONCAT( 
        'ALTER TABLE `', 
        TABLE_NAME, 
        '` ', 
        'ADD ', 
    IF 
        ( 
            NON_UNIQUE = 1, 
        CASE 
                UPPER( INDEX_TYPE )  
                WHEN 'FULLTEXT' THEN 
                'FULLTEXT INDEX'  
                WHEN 'SPATIAL' THEN 
                'SPATIAL INDEX' ELSE CONCAT( 'INDEX `', INDEX_NAME, '` USING ', INDEX_TYPE )  
            END, 
        IF 
            ( UPPER( INDEX_NAME ) = 'PRIMARY', CONCAT( 'PRIMARY KEY USING ', INDEX_TYPE ), CONCAT( 'UNIQUE INDEX `', INDEX_NAME, '` USING ', INDEX_TYPE ) )  
        ), 
        '(', 
        GROUP_CONCAT( DISTINCT CONCAT ( '`', COLUMN_NAME, '`' ) ORDER BY SEQ_IN_INDEX ASC SEPARATOR ', ' ), 
        ');'  
) AS 'Show_Add_Indexes'  
FROM 
    information_schema.STATISTICS  
WHERE 
    TABLE_SCHEMA = '数据库名'  
GROUP BY 
    TABLE_NAME, 
    INDEX_NAME  
ORDER BY 
    TABLE_NAME ASC, 
    INDEX_NAME ASC

你可能感兴趣的:(MySQL数据库批量导出索引脚本)