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

因为表的数据量很大,所以想一次性删除该表的多个索引这个表的大小有80几个G,其中索引就占了60多个G,所以要删除一些多余的索引,以减少表的大小!所以不想每次只删除一个所以... 因为表的数据量很大,所以想一次性删除该表的多个索引
这个表的大小有80几个G,其中索引就占了60多个G,所以要删除一些多余的索引,以减少表的大小!
所以不想每次只删除一个所以然后再重建一次索引,我想一次性删除那些多余的索引,这样索引只需要重建一次
展开
 我来答
SbpAndre
2018-11-09
知道答主
回答量:1
采纳率:0%
帮助的人:813
展开全部

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'
vinson_shen
2010-07-06 · TA获得超过2503个赞
知道小有建树答主
回答量:960
采纳率:100%
帮助的人:0
展开全部
只能一个个删除:

alter table 表名 drop index 索引名;

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

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

如果你是innodb的,则应先删除非主键索引,到最后才删除主键索引
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轩辕渔民
推荐于2018-11-12 · TA获得超过177个赞
知道小有建树答主
回答量:138
采纳率:100%
帮助的人:0
展开全部
如果很多索引,倒不如重新建表

create table test_tmp

insert into test_tmp
select * from test;

drop test;
RENAME TABLE test_tmp TO test
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式