是否有一个MySQL命令可以删除除单个表中的第一个索引之外的所有额外索引,从而只保留主索引?
我可以使用下面的命令删除第二个Post_Date索引,但是我在删除所有其他索引时遇到了问题。
mysql_query("ALTER TABLE $TableName DROP INDEX Post_Date");额外的Post_Date和Post_Date_x索引是在脚本的开头创建的,因此我希望在脚本末尾使用MySQL命令删除它们。
请记住,_x in Post_Date_x并可从1到10,或从1到100。所以可能需要循环或IF语句。
MySQL命令将是PHP脚本的一部分
谢谢您抽时间见我。
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 发布于 2012-04-17 08:27:10
这样就行了-
$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());
}发布于 2012-04-17 01:35:08
对不起,MySQL的ALTER TABLE ny_table DROP ALL INDEXES EXCEPT PRIMARY KEY没有。
在创建索引时,您必须为每个索引创建一个特定的名称,然后创建一个循环,以便使用相同的名称单独运行每个索引的ALTER TABLE ... DROP INDEX SQL命令。
还请注意,创建索引相当昂贵--除非您正在执行索引优化的>~200个查询,否则创建和删除索引可能比使用索引所节省的时间更长。
https://stackoverflow.com/questions/10183897
复制相似问题