首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命令删除表的所有非主索引。

命令删除表的所有非主索引。
EN

Stack Overflow用户
提问于 2012-04-17 01:27:02
回答 2查看 6.3K关注 0票数 3

是否有一个MySQL命令可以删除除单个表中的第一个索引之外的所有额外索引,从而只保留主索引?

我可以使用下面的命令删除第二个Post_Date索引,但是我在删除所有其他索引时遇到了问题。

代码语言:javascript
运行
复制
mysql_query("ALTER TABLE $TableName DROP INDEX Post_Date");

额外的Post_DatePost_Date_x索引是在脚本的开头创建的,因此我希望在脚本末尾使用MySQL命令删除它们。

请记住,_x in Post_Date_x并可从1到10,或从1到100。所以可能需要循环或IF语句。

MySQL命令将是PHP脚本的一部分

谢谢您抽时间见我。

代码语言:javascript
运行
复制
Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
 Edit    Drop   PRIMARY BTREE   Yes No  id  830 A       
 Edit    Drop   Post_Date   BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_2 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_3 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_4 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_5 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_6 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_7 BTREE   Yes No  Post_Date   830 A       
 Edit    Drop   Post_Date_8 BTREE   Yes No  Post_Date   830 A   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 08:27:10

这样就行了-

代码语言:javascript
运行
复制
$res = mysql_query("SHOW INDEX FROM `$TableName` WHERE `Key_name` LIKE 'Post_Date%'");

while ($row = mysql_fetch_object($res)) {
    mysql_query("DROP INDEX `{$row->Key_name}` ON `{$row->Table}`") or die(mysql_error());
}
票数 4
EN

Stack Overflow用户

发布于 2012-04-17 01:35:08

对不起,MySQL的ALTER TABLE ny_table DROP ALL INDEXES EXCEPT PRIMARY KEY没有。

在创建索引时,您必须为每个索引创建一个特定的名称,然后创建一个循环,以便使用相同的名称单独运行每个索引的ALTER TABLE ... DROP INDEX SQL命令。

还请注意,创建索引相当昂贵--除非您正在执行索引优化的>~200个查询,否则创建和删除索引可能比使用索引所节省的时间更长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10183897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档