30 миллионов строк в MySQL

Вечер,

Я прохожу долгий процесс импорта данных из потрепанного 15-летнего формата данных, предназначенного только для чтения, в MySQL, чтобы построить из него несколько небольших статистических таблиц.

Самая большая таблица, которую я построил раньше, была (я думаю) 32 миллиона строк, но я не ожидал, что она станет такой большой, и это действительно напрягало MySQL.

Таблица будет выглядеть так:

surname    name    year    rel    bco    bplace    rco    rplace
Jones      David   1812    head   Lond   Soho      Shop   Shewsbury

Итак, маленькие целые и varchars.

Может ли кто-нибудь дать совет о том, как заставить это работать как можно быстрее? Помогут ли индексы на любой из столбцов или они просто замедлят запросы.

Большая часть данных в каждом столбце будет многократно дублироваться. Некоторые поля имеют не более 100 различных возможных значений.

Основные столбцы, по которым я буду запрашивать таблицу: фамилия, имя, rco, rplace.


person Kohjah Breese    schedule 30.05.2012    source источник
comment
Индексы ускоряют поиск данных и замедляют вставку данных. Вообще говоря, это очень хорошая вещь: я бы предложил создать их для каждого из столбцов, по которым вы, вероятно, будете запрашивать таблицу.   -  person eggyal    schedule 31.05.2012
comment
30 миллионов строк — это немного для современной СУБД. Если, конечно, вы не выполняете полное сканирование таблицы без индексов.   -  person Greg Hewgill    schedule 31.05.2012
comment
Спасибо за ваш комментарий. Я думаю, что это была одна из проблем с моим 32 мил. таблица строк. Вставка строк вызывала сбои.   -  person Kohjah Breese    schedule 31.05.2012
comment
Индексы действительно помогут; смысл их существования — ускорять запросы, а не замедлять их! Вставка индекса сначала займет некоторое время, так как потребуется собрать значения для всей таблицы, но после этого вы обнаружите, что запросы выполняются намного быстрее.   -  person Asherah    schedule 31.05.2012
comment
хм... у вас проблемы с вставкой или запросом большого набора данных или с тем и другим?   -  person Skyrim    schedule 31.05.2012
comment
Ни один. Это был всего лишь предварительный вопрос.   -  person Kohjah Breese    schedule 31.05.2012


Ответы (1)


INDEX по колонке закручивает поиск. Попробуйте INDEX столбцов, которые вы будете чаще использовать в запросах. Как вы упомянули, вы будете использовать столбцы surname, name, rco, rplace. Я предлагаю вам проиндексировать их.

Поскольку в таблице 32 миллиона записей, индексация займет какое-то время, однако ожидание того стоит.

person JHS    schedule 30.05.2012
comment
Спасибо. Я сейчас просто составляю таблицу. Таким образом, я могу создавать индексы для вставки, а не для c. 30 млн рядов. - person Kohjah Breese; 31.05.2012
comment
@KohjahBreese: проверьте оба варианта, вы можете обнаружить, что создание индекса один раз для 30 миллионов строк выполняется быстрее, чем постепенное создание индекса. - person Greg Hewgill; 01.06.2012