mysql怎么一次删除表里多个索引

2025-12-17 16:35:09
推荐回答(3个)
回答1:

MYSQL索引信息存储在INFORMATION_SCHEMA.STATISTICS表里,如果要批量删除索引(主键除外)则可通过其构建批量删除sql。下面是我删除pafss库中所有以j_打头的表的索引的sql。批量删除主键可以通过第二个sql,但是自增列不能通过这种方式删除。

1、SELECT DISTINCT (CONCAT('drop index ', INDEX_NAME, ' on ', TABLE_NAME, ';'))
  FROM INFORMATION_SCHEMA.STATISTICS T
 WHERE T.TABLE_SCHEMA = 'pafss'
   AND T.TABLE_NAME LIKE 'j_%'
   AND T.INDEX_NAME <> 'PRIMARY';
2、SELECT  DISTINCT(concat('alert table ', TABLE_NAME ,' drop primary key ;')),t.*
  FROM INFORMATION_SCHEMA.STATISTICS T
 WHERE T.TABLE_SCHEMA = 'pafss'
   AND T.TABLE_NAME LIKE 'j_%'
   AND T.INDEX_NAME = 'PRIMARY'

回答2:

只能一个个删除:

alter table 表名 drop index 索引名;

所以不想每次只删除一个所以然后再重建一次索引,我想一次性删除那些多余的索引,这样索引只需要重建一次
----------------------
你这话有问题.说明你对其机制理解有误.

mysql下不同存储引擎索引的组织方式有点不同的
如果你是myisam,可以一个个直接删除

如果你是innodb的,则应先删除非主键索引,到最后才删除主键索引

回答3:

如果很多索引,倒不如重新建表

create table test_tmp

insert into test_tmp
select * from test;

drop test;
RENAME TABLE test_tmp TO test