MySQL从表中删除所有索引

avi*_*viv 13 mysql indexing alter-table

我有一个运行一段时间的MySQL数据库,它有很多变化.最近我查看它,我注意到在某些情况下,我在相同的字段上加倍了索引.缺少一些索引,并且通常所有索引都存在大量混乱.

我想从表中删除所有索引.后来我有一个准备好的脚本,它将运行ALTER TABLE并添加相关索引.

有没有办法从表中删除所有索引?

Loï*_*ier 15

如果你有phpmyadmin或任何类似的工具,你可以很容易地以图形方式做到这一点.

或者为每个索引做类似的事情

ALTER TABLE  `table` DROP INDEX  `NameIndex`
Run Code Online (Sandbox Code Playgroud)

你可以用索引获取索引

SHOW INDEX FROM `table`
Run Code Online (Sandbox Code Playgroud)

  • 您还可以在一个查询中删除多个索引,例如`ALTER TABLE table DROP INDEX first, DROP INDEX second, DROP INDEX third` 等。 (2认同)
  • phpMyAdmin 如何变得“非常简单”? (2认同)

Voj*_*rka 14

简单的脚本:

-- 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`;
Run Code Online (Sandbox Code Playgroud)


Fer*_*osh 6

在Ruby on Rails中我这样做:

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
Run Code Online (Sandbox Code Playgroud)