Нужно ли столбцы сделать индексными?
Про индексы читал, мало что понял. Насколько понял, они нужны, чтобы ускорять запросы.
Записей много будет, поэтому задумываюсь о том, чтобы в таблице dpk_add_table_for_all_entries столбцы entry_id и blog_id были индексными.
Помогите понять, нужно ли оно и если нужно, то какого плана sql-запрос на создание таблицы.
У меня пока получается что-то вроде этого:
$sql = "CREATE TABLE " . $table_name . " (
id bigint(20) unsigned NOT NULL auto_increment,
entry_id bigint(20) NOT NULL,
blog_id tinyint(3) NOT NULL,
PRIMARY KEY (id),
KEY entry_id (entry_id),
KEY blog_id (blog_id),
) {$charset_collate};";
dbDelta($sql);
Дополнение №1:
- в таблицах
%wpforms_entriesиндексный столбецform_idменя не интересует, он в логике моего плагина не участвует (я его рассматриваю просто как столбец) - в рамках подсайта записи в таблице
...wpforms_entriesуникальны, уникальный индексentry_id - в рамках таблицы
dpk_add_table_for_all_entriesentry_idнеуникален, т.к. в этой таблице могут храниться записи с одинаковымentry_idс разных подсайтов. Иными словами, могут быть 2 и более записи с одинаковымиentry_id, ноblog_idу них будет разный. Основываясь на этих данных могу предположить, что стоит сделать составной уникальный индекс, состоящий изentry_idиblog_id
Ответы (1 шт):
Индексы надо создавать по тем столбцам, по которым будет производиться выборка. Если столбцы присутствуют в WHERE запросах, то индекс весьма уместен.
В вашем случае, похоже, плагин будет делать выборку как минимум по двум столбцам: ...WHERE entry_id = xxx and blog_id=yyy. В этом случае не лишним будет создать составной (composite) индекс.
$sql = "CREATE TABLE " . $table_name . " (
id bigint(20) unsigned NOT NULL auto_increment PRIMARY KEY,
entry_id bigint(20) NOT NULL,
blog_id tinyint(3) NOT NULL,
INDEX " . $index_name . " (id, entry_id, blog_id)
) {$charset_collate};";
dbDelta($sql);
В данном случае составной индекс создаётся по столбцам id, entry_id и blog_id. Это ускоряет запросы, в которых присутствуют в WHERE один, два или три указанных столбца.
