ВЫБРАТЬ в индексированном столбце медленно - PullRequest
0 голосов
/ 01 мая 2018

В базе данных MySQL у меня есть таблица, которая имеет только 2 столбца для всех намерений и целей: ключевой хэш и значение. Оба типа INTEGER. Столбец хеша будет иметь большое количество дубликатов (в худшем случае ожидается ~ 80 тыс. Дубликатов для каждого хеша, из-за небольшого прообраза хеша сделать уникальным невозможно), и таблица содержит порядка 100 миллиардов строк.

Сейчас у меня есть индексированный хеш-столбец (CREATE INDEX idx_hash ON table(hash)); Однако поиск очень медленный. Что-то вроде SELECT value FROM table WHERE hash=123 LIMIT 50 займет минуты, если не часы, в то время как аналогичный выбор в таблице аналогичного размера в столбце первичного ключа завершится очень быстро на той же машине.

Итак, мой вопрос: как мне оптимизировать поиск в этом случае? Возможно ли сублинейное ВЫБОР времени в столбцах индекса? Эта таблица будет в основном только для чтения, ее восстановление возможно, но займет много времени, поэтому я хотел бы собрать некоторую информацию и сделать это правильно.

EXPLAIN говорит:

+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
| id | select_type | table          | partitions | type | possible_keys | key  | key_len | ref  | rows      | filtered | Extra       |
+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
|  1 | SIMPLE      | partial_lookup | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 100401571 |    10.00 | Using where |
+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+

ANALYZE:

+--------------------+---------+----------+----------+
| Table              | Op      | Msg_type | Msg_text |
+--------------------+---------+----------+----------+
| partial_lookup     | analyze | status   | OK       |
+--------------------+---------+----------+----------+
1 row in set (1.47 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...