2013-07-04 2 views
0

У меня есть таблица с ~ 20 столбцами.Горизонтальное разделение в MySQL

----------------------------------------------------------------- 
    GUID_PK | GUID_SET_ID | Col_3 | Col_4 | ... | Col_20 
----------------------------------------------------------------- 

Там может быть тысячи Sets каждый из которых имеет десятки менее тысячи записей. Записи внутри набора связаны друг с другом. множества полностью независимы друг от друга. Целый набор читается/записывается одновременно в одной большой транзакции. Когда запись записывается, она доступна только для чтения навсегда, никогда не изменялась, только читается. Данные из этой таблицы редко удаляются. когда он удаляется, весь набор удаляется за один раз.

Только SET_ID - это входящий внешний ключ. PK - исходящий внешний ключ к другой таблице. в таблице подробностей около 3 или 4 записи (каждая отдельная капля) сохраняются на главную запись.

Вопрос: должен ли я разбивать таблицы? Я думаю, да. Мой босс думает лучше. он хочет, чтобы таблицы создавались динамически, одна основная одна деталь для каждого набора. Мне лично не нравится идея динамического создания, но боюсь архитектуры с одним столом до правила.

Объемные вставки и массовые отборы определенно достигнут производительности. Массовые удаления снова изменят порядок индексов. Что было бы оптимальной структурой?

+0

Когда вы вставляете данные, все столбцы, такие как 'Col_x', заполняются? или только некоторые? – Stephan

+0

@Stephan все столбцы заполнены за один раз. фактически два столбца имеют значение NULL, а иногда, но редко, они могут быть нулевыми. но никакая запись не обновляется позже. что сделано - то сделано. – inquisitive

+0

в этом случае вы можете разбить таблицу на GUID_SET_ID с помощью hash http://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html – Stephan

ответ

0

Принимая во внимание большинство Col_x колонн заселенных вы можете сделать HASH PARTITIONING:

CREATE TABLE 

.... 

PARTITION BY HASH(GUID_SET_ID) 
PARTITIONS NO_PART; 

Где NO_PART является количество разделов, которые вы хотите, это должно быть установлено с учетом:

1) объем данных, которые вы получите ежедневно
2) объём данных, которые вы оцениваете, которые будут получены в будущем

Также вы можете проверить другие типы разделов here.

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