2014-11-21 2 views
1

Я изучаю способы разбиения таблицы MySQL на год и месяц. Можете ли вы, пожалуйста, проанализировать мое создание таблицы ниже и посмотреть, приведет ли этот метод разделения к помещению данных по месяцам и годам в эти подразделы? Я использую MySQL 5.5, и я не могу использоватьЭффективный метод для разбиения таблицы MySQL по годам и месяцам

SELECT * FROM points_log PARTITION (p0_p0sp0); 

, чтобы проверить, работает ли разметка. Если есть способ проверить это в MySQL 5.5, прокомментируйте. Я ценю ваши отзывы и критику в этом разделе.

Вот мое создание таблицы:

CREATE TABLE `points_log` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `nick` char(25) NOT NULL, 
    `amount` decimal(7,4) NOT NULL, 
    `stream_online` tinyint(1) NOT NULL, 
    `modification_type` tinyint(3) unsigned NOT NULL, 
    `dt` datetime NOT NULL, 
    PRIMARY KEY (`id`,`dt`,`nick`), 
    KEY `nick_idx` (`nick`), 
    KEY `amount_idx` (`amount`), 
    KEY `modification_type_idx` (`modification_type`), 
    KEY `dt_idx` (`dt`), 
    KEY `stream_online_idx` (`stream_online`) 
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 
    PARTITION BY RANGE(YEAR(dt)) 
    SUBPARTITION BY HASH(MONTH(dt)) 
    SUBPARTITIONS 12 (
     PARTITION p0 VALUES LESS THAN (2014), 
     PARTITION p1 VALUES LESS THAN (2015), 
     PARTITION p2 VALUES LESS THAN (2016), 
     PARTITION p3 VALUES LESS THAN (2017), 
     PARTITION p4 VALUES LESS THAN (2018), 
     PARTITION p5 VALUES LESS THAN (2019), 
     PARTITION p6 VALUES LESS THAN (2020), 
     PARTITION p7 VALUES LESS THAN MAXVALUE 
    ); 

ответ

6
  • SUBPARTITIONs, вероятно, бесполезно.
  • Не разделяйте дату; держите его как одно поле.
  • Использование BY RANGE(TO_DAYS(dt)) VALUES LESS THAN (TO_DAYS('2015-02-01'))
  • BY HASH, вероятно, совершенно бесполезно для работы.
  • WHERE dt BETWEEN .. AND .. не может выполнять разделение разделов в структуре, которую у вас есть.
  • Не пользователь более 50 разделов (по соображениям производительности).
  • Не создавайте более одного «будущего» раздела; строить их по мере необходимости. (Это незначительное улучшение производительности.)
  • Не используйте CHAR для полей переменной длины. Используйте VARCHAR.
+0

Я действительно не знаю, почему вы не получили повышение. Это все верно ИМХО. – seven

+0

Thanks @seven; Я так долго разглагольствовал; возможно, другие просто закатывают глаза на мое повторение. У вас есть точка - вопрос был «просмотрен» 1171 раз. –

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