У меня есть таблица с ~ 20 столбцами.Горизонтальное разделение в MySQL
-----------------------------------------------------------------
GUID_PK | GUID_SET_ID | Col_3 | Col_4 | ... | Col_20
-----------------------------------------------------------------
Там может быть тысячи Sets
каждый из которых имеет десятки менее тысячи записей. Записи внутри набора связаны друг с другом. множества полностью независимы друг от друга. Целый набор читается/записывается одновременно в одной большой транзакции. Когда запись записывается, она доступна только для чтения навсегда, никогда не изменялась, только читается. Данные из этой таблицы редко удаляются. когда он удаляется, весь набор удаляется за один раз.
Только SET_ID
- это входящий внешний ключ. PK
- исходящий внешний ключ к другой таблице. в таблице подробностей около 3 или 4 записи (каждая отдельная капля) сохраняются на главную запись.
Вопрос: должен ли я разбивать таблицы? Я думаю, да. Мой босс думает лучше. он хочет, чтобы таблицы создавались динамически, одна основная одна деталь для каждого набора. Мне лично не нравится идея динамического создания, но боюсь архитектуры с одним столом до правила.
Объемные вставки и массовые отборы определенно достигнут производительности. Массовые удаления снова изменят порядок индексов. Что было бы оптимальной структурой?
Когда вы вставляете данные, все столбцы, такие как 'Col_x', заполняются? или только некоторые? – Stephan
@Stephan все столбцы заполнены за один раз. фактически два столбца имеют значение NULL, а иногда, но редко, они могут быть нулевыми. но никакая запись не обновляется позже. что сделано - то сделано. – inquisitive
в этом случае вы можете разбить таблицу на GUID_SET_ID с помощью hash http://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html – Stephan