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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容