2013-07-13 2 views
0

У меня есть MySQL DB с двумя столбцами. 'Key' и 'Used'. Ключ - это строка, Used - целое число. Есть ли очень быстрый способ поиска конкретного ключа, а затем вернуть использование в огромном БД MySQL с 6000000 рядами данных.Запрос огромного MySQL DB

+0

Попробуйте создать ключ 'index' –

+1

Результат из' SHOW CREATE TABLE mytable' был бы полезен, чтобы определить, существует ли подходящий индекс или нет, и в зависимости от того, какой движок используется, соответствующее индексирование стратегия. Кроме того, вывод из «EXPLAIN SELECT» ... покажет нам план доступа. – spencer7593

ответ

2

Вы можете сделать это быстро, создав индекс на key поле:

CREATE INDEX mytable_key_idx ON mytable (`key`); 

Вы можете на самом деле сделать это еще быстрее для чтения путем создания покрытия индекса на обоих (key, used) полях:

CREATE INDEX mytable_key_used_idx ON mytable (`key`, `used`); 

В этот случай, при чтении, MySQL мог получить значение used из самого индекса, не читая таблицу (только для проверки только индекса). Однако, если у вас много активности записи, индекс покрытия может работать медленнее, потому что теперь он должен обновлять как индекс, так и фактическую таблицу.

+0

Другой способ - использовать таблицу разделов :). –

+0

Если ключ был ключом кластера таблицы InnoDB, индекс покрытия не был бы необходим, так как вся таблица сама по себе является индексом. – spencer7593

+0

@SumitGupta: Я не думаю, что таблица разбиения будет иметь какое-то преимущество здесь. Это принесет ненужную сложность без очевидных преимуществ. – mvp

0

Нормативный SQL для этого будет:

SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

Выход из

EXPLAIN 
SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ; 

Даст подробности о плане доступа, какие индексы рассматриваются и т.д.

выход с

SHOW CREATE TABLE mytable ; 

предоставит информацию о таблице, используемом двигателе и доступных индексах, а также о типах данных.

Медленная производительность по подобному запросу обычно указывает на неоптимальный план доступа либо потому, что подходящие индексы недоступны, либо не используются. Иногда несоответствие набора символов между типом данных столбца и литеральным типом данных в предикате может сделать индекс «непригодным» для конкретного запроса.

Смежные вопросы