2014-12-09 5 views
0

У меня есть таблица MySQL с почти 40 миллионами записей. Схема выглядит так:MySQL: Большая таблица, медленные запросы и индексы

id (Key field, unique) 
data_type (Key field, enumeration of TXT, BIN, HEX) 
line_number (Key field) 
record_label (low cardinality) 
record_value (high cardinality) 

Первые три поля являются частью первичного ключа, который является уникальным. Запросы в этой таблице занимают очень много времени, даже если я использую одно из ключевых полей в запросе. Исследование здесь показало, что мне нужны дополнительные индексы, но я не уверен точно, что индексировать. Например, запрос, как это:

SELECT * FROM my_table WHERE data_type = 'TXT' and id < 40000 

, который не должен возвращать не более 4000 записей работает в течение нескольких минут без возвращения результата. Должен ли я создавать индекс для каждого поля, которое может быть использовано само по себе, а также все возможные комбинации полей, которые могут возникать в запросе? Что еще я могу сделать для повышения производительности?

Спасибо. -pv-

ответ

0

Лучший показатель для этого запроса:

SELECT * 
FROM my_table 
WHERE data_type = 'TXT' and id < 40000 

является составным индексом my_table(data_type, id). Вы можете добавить дополнительные столбцы после эти первые два. Но для этого запроса первые два столбца должны быть data_type, а затем id.

MySQL имеет довольно четкие documentation об использовании индексов с несколькими столбцами, которые могут помочь вам определить индексы, которые вам действительно нужны.

+0

Спасибо. Я просмотрел информацию об индексе в документах MySQL, но не понял этого. Также объяснил объяснение EXPLAIN, поэтому спасибо. –

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