Я недавно унаследовал унаследованное приложение, включающее базу данных MySQL, центральным элементом которой является «таблица», которую мы назовем Foo
- только это не фактическая таблица, а несколько идентичных таблиц с именем Foo01
, Foo02
... до Foo31
. Записи вставляются в FooNN
, когда днем месяца для этой записи является NN
, этот «логический раздел c» управляется на прикладном уровне.
В целом, Foo
растет с постоянной скоростью ~ 100 тыс. Строк в день. Общее количество (~ 3M) и данные строк указывают на то, что каждая запись удаляется / сохраняется в истории примерно через месяц, поэтому размер не является большой проблемой. Вставка происходит с примерно постоянной скоростью с течением времени, обновления отсутствуют. Запросы на Foo
происходят только из-за того, что пользователи (не так много) проводят ручной поиск, который может фильтроваться или не фильтроваться по дате «разбиения», а также может иметь или не иметь другие параметры поиска.
Для меня это выглядит ужасно, как будто кто-то в прошлом делал преждевременную оптимизацию, вероятно, в сочетании с ложкой смелого невежества. Но я не эксперт вообще, я просто пытаюсь понять, почему кто-то go так сошел со своего пути.
Имеет ли этот подход какой-либо смысл вообще? то есть будет ли у него какое-либо преимущество перед встроенным разделением MySQL (с учетом очевидных недостатков)?