2015-08-04 3 views
0

создать таблицу, как показано нижеMySQL разбиение на строках таблицы

CREATE TABLE `Archive_MasterLog` (
    `LogID` INT(10) NOT NULL AUTO_INCREMENT, 
    `LogDate` DATETIME NULL, 
    `AssessorName` VARCHAR(255) NULL, 
    `TblName` VARCHAR(100) NULL, 
    PRIMARY KEY (`LogID`), 
    UNIQUE INDEX `Index_72491D22_3806_4A01` (`LogID`) 
) 
ENGINE = INNODB; 

Я хочу секционирование этой таблицы по количеству строк таблицы ==> каждого из 100K строк будет создать новый раздел.

Как это сделать из MySQL?

+1

Я думаю, что ближе всего вы можете перейти по диапазону на 'LogId'. Это не идеально, потому что значения не гарантируют 100% отсутствие отверстий, но, вероятно, это хорошо для большинства целей. –

ответ

0

Проблема возникает из-за частота данных. В течение нескольких месяцев или недель у нас более 2 М строк/месяц, но в других месяцах мы имеем менее 10 тыс. Строк. Я проанализировал данные и обнаружил, что мы должны разделить по логину

Поведение также происходит от клиента. Они не хотят менять ключ таблицы.

Вот мое решение

CREATE TABLE `ULPAT`.`MasterLog` (
    `LogID` INT(10) NOT NULL AUTO_INCREMENT, 
    `LogDate` DATETIME NULL, 
    `AssessorName` VARCHAR(255) NULL, 
    `TblName` VARCHAR(100) NULL, 
    PRIMARY KEY (`LogID`), 

    INDEX `LogID` (`LogID`) 
) 
ENGINE = INNODB 
PARTITION BY HASH(mod(ceiling(LogID*0.0000005), 400)) 
PARTITIONS 400; 

Я думаю, что это не самое лучшее решение, но работа для меня.

Thanks

+1

Это решение не работает для MySQL 5.5 или выше. Мессегация - «Код ошибки: 1564. Эта функция разделов недопустима» –

+1

У вас избыточный индекс - «ПЕРВИЧНЫЙ КЛЮЧ» - это индекс; удалите 'INDEX (LogID)'. –

+1

400 разделов много - и это приводит к неэффективности. –

1

Почему? Вероятно, вы не получите никаких преимуществ от PARTITIONing.

Вы будете чистить старые данные? Если это так, раздел в LogDate. Затем мы можем обсудить, как очистить.

У вас есть две клавиши на одной и той же паре строк, держите PRIMARY KEY, забрасывая ключ UNIQUE.

У вас есть индекс на RecordID, но эта колонка не существует ??

+1

Привет, Рик, я обновляю вопрос, чтобы удалить RecordID. Но я думаю, что вы правы, я должен разделить на LogDate –

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