Если вы просто хотите попробовать добавить разделы, я бы рекомендовал использовать разделы по ключам. По существу, это просто разделит таблицу с помощью внутренней хеш-функции, примененной к столбцу (столбцам), указанным в разделе.
В вашем случае, кажется, что запросы используют id
чаще всего, и поскольку это первичный ключ, синтаксис очень прост:
CREATE TABLE `books` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`picture` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`url` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `url` (`url`(333)),
INDEX `name` (`name`)
)
PARTITION BY KEY()
PARTITIONS 8;
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=937
Выше будет создано 8 разделов. Поскольку я не указал ни один столбец для использования с предложением разделения, MySQL по умолчанию использует первичный ключ, что будет хорошо в вашем случае.
При условии разумно сбалансированного разброса целочисленных значений, используемых в столбце id
, каждый раздел будет составлять примерно 1,25 ГБ. При выполнении запроса для определенного идентификатора теперь следует выбирать данные только из одного раздела, что ускоряет доступ.
Вы можете обратиться к документации MySQL здесь: http://dev.mysql.com/doc/refman/5.5/en/partitioning-key.html
Само собой разумеется, id является первичным ключом, так что это уже должно было быть достаточно быстрым. Я не уверен в большем количестве предостережений, которые могут применяться к индексам + разделам с MyISAM. Я работаю в основном с InnoDb, и это то, что я хотел бы сделать, по крайней мере с InnoDb, чтобы улучшить производительность моих запросов.