У меня есть следующая таблица (T) в Mysql:MySQL лучший показатель для статической таблицы
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| first | varchar(50) | NO | PRI | NULL | |
| second | varchar(50) | NO | PRI | NULL | |
| third | varchar(50) | NO | PRI | NULL | |
| count | bigint(20) | NO | | NULL | |
+--------+-------------+------+-----+---------+-------+
Эта таблица содержит несколько миллионов строк. Я создал следующие показатели:
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| T | 0 | PRIMARY | 1 | first | A | 591956 | NULL | NULL | | BTREE | | |
| T | 0 | PRIMARY | 2 | second | A | 67927032 | NULL | NULL | | BTREE | | |
| T | 0 | PRIMARY | 3 | third | A | 271708128 | NULL | NULL | | BTREE | | |
| T | 1 | SECONDARY | 1 | second | A | 398399 | NULL | NULL | | BTREE | | |
| T | 1 | SECONDARY | 2 | third | A | 45284688 | NULL | NULL | | BTREE | | |
| T | 1 | SEC | 1 | second | A | 4382389 | NULL | NULL | | BTREE | | |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
поисковые запросы типа:
SELECT * FROM T WHERE first = "WHAT" AND third = "EVER";
и
SELECT * FROM T WHERE first = "WHAT" AND second = "EVER";
также, как правило, быстро (результаты всегда получаются менее 1 секунды). Однако поиск таких как:
SELECT * FROM T WHERE second = "WHAT" AND third = "EVER";
очень медленно (обычно более 1 минуты). Я создал индекс SEC (см. Таблицу индексов), но это не улучшает результаты.
Какой индекс следует использовать для ускорения этих поисков? (Я не продолжал экспериментировать, потому что создание одного индекса занимает около 5 часов)
Дополнительная информация: Таблица статична (т.е. я не буду добавлять никаких строк - меня интересует только скорость поиска), а дисковое пространство не является проблемой.
В таблице уже есть первичный ключ (первый, второй, третий) [см таблицу выше]. Я также попытался добавить дополнительный индекс (первый, второй), но не улучшил результаты. – m41n1
Perdon me - Я имел в виду вторую и третью колонки. Ответ исправлен. индекс (первый, второй, третий) не может использоваться для запроса только для столбцов второй и третьей. Как правило, порядок будет другим. – suspectus
Этот индекс уже существует «SECONDARY» (см. Таблицу индексов выше). В настоящее время у меня есть ПЕРВИЧНЫЙ КЛЮЧ (первый, второй, третий), индекс, который охватывает (второй, третий) и другой индекс только во втором столбце. – m41n1