Ответы:
Вы можете выполнять произвольные операторы SQL с помощью wpdb :: query () , включая операторы определения данных, например
function
create_index ()
{
global $wpdb ;
$sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;
$wpdb->query ($sql) ;
return ;
}
Примечание. Поскольку $wpdb->query()
может выполняться произвольный SQL, если передаваемый ему оператор содержит ЛЮБОЙ пользовательский ввод, вы должны использовать wpdb :: prepare () для защиты от атак SQL-инъекций.
Но возникает вопрос: как вы создавали таблицы для плагинов? «Вручную» или программно? Если программно, вы не использовали $wpdb->query()
? Если вы сделали это «вручную», то вам действительно нужно создавать таблицы (и их индексы) после активации плагина.
Смотрите отличный ответ на этот другой вопрос WPSE, чтобы узнать, как подключить активацию плагина (и / или деактивацию и удаление) для создания таких вещей, как создание личных таблиц.
Используя dbDelta, поверх PRIMARY KEY, вы можете включить слово KEY, чтобы создать индекс для других столбцов:
Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включить хотя бы один 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;