回答:
wpdb :: query()を使用すると、データ定義ステートメントなど、任意の SQLステートメントを実行できます。
function
create_index ()
{
global $wpdb ;
$sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;
$wpdb->query ($sql) ;
return ;
}
注:ので$wpdb->query()
、実行することができ、任意のあなたがそれに渡す文が含まれている場合は、SQLをANYユーザー入力を、そしてあなたが使うべきwpdbを::()を準備し、SQLインジェクション攻撃から保護します。
しかし、これは問題を引き起こします:どのようにしてプラグイン固有のテーブルを作成しましたか?「手動で」またはプログラムで?プログラムで使用する場合、使用しませんでした$wpdb->query()
か?「手動」で行った場合は、プラグインのアクティブ化時にテーブル(およびそのインデックス)を実際に作成する必要があります。
プラグインのアクティブ化(および/または非アクティブ化とアンインストール)をフックしてプライベートテーブルを作成する方法については、この他のWPSE質問に対する優れた回答を参照してください。
PRIMARY KEYの上にdbDeltaを使用すると、KEYという単語を含めて、他の列のインデックスを作成できます。
同義語のINDEXではなくキーワードKEYを使用し、少なくとも1つのKEYを含める必要があります。
コアのschema.phpの例:
CREATE TABLE $wpdb->termmeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
term_id bigint(20) unsigned NOT NULL default '0',
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY term_id (term_id),
KEY meta_key (meta_key($max_index_length))
) $charset_collate;