MySQL « Оптимальная разбивка больших объемов данных на таблицы

Видел ли кто-нибудь информацию по исследованиям на тему, какой объем данных (строкистолбцы) оптимален на таблицу?

Вопрос интересует для того, чтобы сформировать правильное деление данных на таблицы, для осуществления быстрой выборки по ним.

Предмет вопроса:

база сайтов ~ 500 тысяч.

База страниц сайтов ~ 10 млн.



Возможно у кого-то есть данные на основе собственного опыта?

1 ответов


Я занимался партиционированием таблиц (разбиение большой таблицы на несколько).
В MySQL именно в версии 5.1 появилась эта функция. Она, думаю, поможет тебе.
Вот ссылкы на описиние данной функции и примеры:
http://habrahabr.ru/blogs/mysql/39918/
http://habrahabr.ru/blogs/webdev/66151/
Я лично этим занимаюсь в Oracle 11, но базы похожи все :)
Оптимальный вариант объема данных ты выбираешь сам, исходя из количества данных. Можно делать 1 бальшую таблицу на 4 меньшего размера, к примеру, но равные по количеству. В общем я хочу сказать, что тут нет однозначной цифры для оптимальности, нужно экспериментировать :)


Тут целиком зависит от запросов которые ты будешь гонять по этим базам. Можно создать один индекс по site_id и он будет тебе выборку делать быстро и на 10 лямах. А можно сделать шардинг на 100 таблиц и один фиг запрос сложный будет висеть 2 часа, т.к. таблица не правильно спроектирована.

Я бы предложил сперва составить список запросов которые будут выполняться на этой базе и погонять их на EXPLAIN SELECT / расставлять индексы параллельно. От этого и исходить - нужно шаманить дальше или нет.

Если же дойдет до партиционирования, то учти что на mysql этот трюк редко получается использовать из-за ограничение на полное вхождение PK в поле по которому идет партиционирование (насколько я помню).