3

単一のテーブルの最初のインデックスを除くすべての追加のインデックスを削除して、プライマリインデックスのみを保持できるMySQLコマンドはありますか?

次のMySQLコマンドを使用して2番目のPost_Dateインデックスを削除できますが、残りのすべてを削除する際に問題が発生します。

mysql_query("ALTER TABLE $TableName DROP INDEX Post_Date");

追加のPost_DateインデックスとPost_Date_xインデックスはスクリプトの最初に作成されるので、スクリプトの最後にあるMySQLコマンドを使用して、スクリプトの最後にそれらを削除したいと思います。

Post_Date_xの_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   
4

2 に答える 2

4

これでうまくいくはずです-

$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-17T08:27:10.683 に答える
0

申し訳ありませんが、MySQLコマンドはありませんALTER TABLE ny_table DROP ALL INDEXES EXCEPT PRIMARY KEY

ALTER TABLE ... DROP INDEX作成時にインデックスごとに特定の名前を作成してから、同じ名前を使用してインデックスごとにSQLコマンドを個別に実行するループを作成する必要があります。

インデックスの作成にはかなりの費用がかかることにも注意してください。インデックスによって最適化された200を超えるクエリを実行しない限り、インデックスの作成と削除には、それらを使用して節約するよりも時間がかかる可能性があります。

于 2012-04-17T01:35:08.147 に答える