Вы можете использовать таблицы слияния, однако они более устарели из версий 4.x. Учитывая, что ваше приложение разбито на разделы вручную, так как оно либо а) вы используете действительно старую версию, либо б) первоначальный разработчик не знал о разделах таблицы.
Короче говоря, если вы используете 5.1+, вы можете позволить MySQL сделать это для вас. См.
Http://dev.mysql.com/doc/refman/5.1/ru/partitioning.html. Если вы используете версию 5.5, вам следует проверить эти конкретные документы, поскольку вы найдете некоторые различия.
Есть много преимуществ для разделения. Однако это действительно зависит от имеющегося набора данных, шаблонов доступа и способа его индексации. Кроме того, имейте в виду, что мои следующие комментарии относятся к разделу разделов mysql 5+, а НЕ к более ранним таблицам mysql Merge; хотя они иногда обсуждаются с точки зрения разделов.
Несколько примеров:
- Прямое ведение (или хеширование) на основе часто используемого ключа поиска. Если вы почти всегда просматриваете первичный или другой уникальный ключ, то mysql может сократить пространство поиска в зависимости от того, сколько у вас разделов. Однако обратите внимание, что это может быть вредно, если вы разбиваете по одному ключу, а затем часто выполняете поиск по другому ключу. Если вы выполняете поиск по ключу, по которому данные не разбиты, то он должен выполнить БОЛЬШЕ поисков при поиске (по одному на каждый раздел, откровенно говоря, он не знает, где находятся данные)
- Рассмотрим ситуации, когда у вас есть временной набор записей, который увеличивается по дате, и вы периодически сокращаете предыдущий месяц. Если вы разбиваете по дате, вы можете просто удалить раздел, который так же быстр, как и таблица, независимо от ее размера. Если бы вы должны были обрезать такую таблицу по датам, вам нужно было бы выполнить один или несколько запросов DELETE, где каждая отдельная строка удаляется. Недостатком этого является то, что mysql не создает автоматически новые разделы, как только вы достигли максимальной даты, которую вы учли в этом сценарии; вам нужны дополнительные сценарии обслуживания, созданные с вашей стороны, чтобы добавлять разделы по мере необходимости.
- Если вы используете myisam, проверки и восстановление выполняются намного быстрее. Рассмотрим таблицу myisam 100G. Если вы хотите восстановить разбитую таблицу, вам потребуется как минимум около 100 ГБ свободного места на диске. Если он был разбит на 10 разных блоков одинакового размера, вам потребуется всего 10 ГБ места (и меньше ключа key_sort_buffer для быстрого восстановления); но нужно будет сделать итерацию для каждого раздела.
Итак, в целом, общий подход к разделению таблиц может предложить много преимуществ. Однако это не волшебная палочка, которую нужно применять вслепую, не обращая внимания на шаблоны доступа и то, как именно вы разбиваете.
Я мог бы представить себе ситуации, когда желаемое разбиение зависит от конкретного приложения и было бы лучше, если бы эта логика находилась на уровне приложения. Однако, учитывая ваше прямое описание модуля 10, это не похоже на такой случай.
РЕДАКТИРОВАТЬ
При написании моего описания я забыл, что вы указали, что ваша таблица состоит из 100 тысяч строк. С полной схемой вашей таблицы и средней длиной строки трудно сказать наверняка, но в целом это звучит среднего размера даже для скромного оборудования. В то же время, если это не вызывает проблем, как сейчас или в обозримом будущем, не тратьте время и вносите риск, меняя его.