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 в поле по которому идет партиционирование (насколько я помню).