Antworten:
Sie können beliebige SQL-Anweisungen mit wpdb :: query () ausführen , einschließlich Datendefinitionsanweisungen, z
function
create_index ()
{
global $wpdb ;
$sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;
$wpdb->query ($sql) ;
return ;
}
Hinweis: Da $wpdb->query()
ausführen können beliebige SQL, wenn die Anweisung Sie es passieren enthält ANY Benutzereingabe, dann sollten Sie wpdb :: () vorzubereiten gegen SQL - Injection - Angriffe zu schützen.
Dies wirft jedoch die Frage auf: Wie haben Sie Ihre Plugin-spezifischen Tabellen erstellt? "Manuell" oder programmatisch? Wenn programmgesteuert, haben Sie nicht verwendet $wpdb->query()
? Wenn Sie es "manuell" gemacht haben, sollten Sie die Tabellen (und ihre Indizes) bei der Aktivierung des Plugins wirklich erstellen.
In der hervorragenden Antwort auf diese andere WPSE-Frage erfahren Sie, wie Sie sich in die Plugin-Aktivierung (und / oder Deaktivierung und Deinstallation) einbinden können, um beispielsweise private Tabellen zu erstellen.
Mit dbDelta können Sie über einem PRIMARY KEY das Wort KEY einfügen, um einen Index für andere Spalten zu erstellen:
Sie müssen das Schlüsselwort KEY anstelle des Synonym INDEX verwenden und mindestens einen KEY einschließen.
Beispiel aus schema.php im Kern:
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;