Відповіді:
Ви можете виконувати довільні оператори 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, якщо ви передаваєте йому заяву, містить будь-які введення користувача, то для захисту від атак SQL Injection слід використовувати wpdb :::
Але це викликає питання: як ви створили свої плагін-таблиці? "Вручну" чи програмно? Якщо програмно ви не використовували $wpdb->query()
? Якщо ви зробили це "вручну", тоді вам слід створити таблиці (та їх індекси) при активації плагіна.
Дивіться відмінну відповідь на це інше питання WPSE про те, як підключити активацію плагінів (та / або дезактивацію та видалення), щоб робити такі дії, як створення приватних таблиць.
Використовуючи dbDelta, поверх ПЕРВИННОГО КЛЮЧА, ви можете включити слово 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;