代码之家  ›  专栏  ›  技术社区  ›  aviv

mysql删除表中的所有索引

  •  12
  • aviv  · 技术社区  · 15 年前

    我有一个mysql数据库,运行了一段时间,上面有很多修改。最近我查看了一下,发现在某些情况下,同一字段的索引翻了一番。一些索引丢失了,而且通常所有索引都混乱不堪。

    我想删除表中的所有索引。稍后,我将运行一个准备好的脚本 ALTER TABLE 并增加相关指标。

    是否有方法从表中删除所有索引?

    4 回复  |  直到 15 年前
        1
  •  15
  •   Loïc Février    15 年前

    ALTER TABLE  `table` DROP INDEX  `NameIndex`
    

    SHOW INDEX FROM `table`
    
        2
  •  9
  •   usr-local-ΕΨΗΕΛΩΝ    9 年前

    -- list all non-unique indexes
    SELECT table_name AS `Table`,
           index_name AS `Index`,
           GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
    FROM information_schema.statistics
    WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
    GROUP BY 1,2;
    
    -- drop all non-unique indexes
    SET SESSION group_concat_max_len=10240;
    
    SELECT CONCAT('ALTER TABLE ', `Table`, ' DROP INDEX ', GROUP_CONCAT(`Index` SEPARATOR ', DROP INDEX '),';' )
    FROM (
    SELECT table_name AS `Table`,
           index_name AS `Index`
    FROM information_schema.statistics
    WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
    GROUP BY `Table`, `Index`) AS tmp
    GROUP BY `Table`;
    
    -- add all non-unique indexes , WITHOUT index length spec
    SET SESSION group_concat_max_len=10240;
    SELECT CONCAT('ALTER TABLE ', `Table`, ' ADD INDEX ', GROUP_CONCAT(CONCAT(`Index`, '(', `Columns`, ')') SEPARATOR ',\n ADD INDEX ') )
    FROM (
    SELECT table_name AS `Table`,
           index_name AS `Index`,
            GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
    FROM information_schema.statistics
    WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
    GROUP BY `Table`, `Index`) AS tmp
    GROUP BY `Table`;
    
        3
  •  5
  •   Fernando Kosh lcapra    13 年前

      indexes = ActiveRecord::Base.connection.execute("SHOW INDEX FROM tablename")
      indexes.each do |index|
        ActiveRecord::Base.connection.execute("ALTER TABLE tablename DROP INDEX #{index[2]};")
      end
    
        4
  •  4
  •   The Surrican    15 年前