Это выглядит как "проблема XY".
Вы хотите "не иметь огромную таблицу". Но почему почему у вас есть это требование?
Возможно, это потому, что некоторые ответы в некоторые сценарий ios медленнее, чем вы ожидаете .
Вместо того, чтобы разбивать таблицы в разные стороны, что, как упоминал Гордон Линофф, является SQL антипаттерном и может оставить вас в беде больше, чем прежде, вам следует контролировать вашу систему и измерять производительность различных запросов, которые вы используете, взвешивая их по частоте. То есть, если запрос № 1 выполняется сто тысяч раз за период и занимает 0,2 секунды, то это 20 000 секунд, и вы должны записать его на запрос № 1. Запрос № 2, который занимает в пятьдесят раз больше - десять полных секунд - но выполняется только сто раз, будет составлять только одну двадцатую от общего времени первого.
(Поскольку длительные задержки заметны конечными пользователями, некоторые используют вариант этой формулы, в котором вы умножаете количество экземпляров одного запроса на квадрат - или более высокие степени - его длительности в миллисекундах. Таким образом, более медленные запросы приносят больше внимание на).
Как бы то ни было, если вы знаете , какие запросов вы должны оптимизировать в первую очередь, , а затем , вы можете приступить к оптимизации вашей схемы.
Первое, что нужно проверить, это индексы. И возможно нормализация. Они охватывают добрые две трети «малоэффективных» дел, с которыми я встречался до сих пор.
Тогда есть сегментация. Возможно, не в вашем случае, но у вас может быть таблица транзакций или такая, где вас обычно интересует только текущий солнечный или финансовый год. Добавление столбца с этой информацией увеличит таблицу, но выбор только тех записей, которые как минимум соответствуют условию года, сделает большинство запросов намного быстрее. Это поддерживается и на более низком уровне (см. «Sharding»).
Тогда есть неосторожные СОЕДИНЕНИЯ и ПОДБОРЫ. Обычно они начинаются с малого и быстро, поэтому никто не мешает проверить индексы, нормализацию или условия на них. Через пару лет внутренний SELECT собирает миллион записей, а внешний JOIN отбрасывает девятьсот девяносто девять тысяч из них. Переведите условие отмены в подвыбор и посмотрите, как запрос взлетает.
Затем вы можете проверить, действительно ли к какой-то информации обращаются редко (например, у меня есть одна БД, где у каждого пользователя есть куча финансовой информации, но это необходимо только в 0,1% запросов. Так что в этом случае да, я разделил эту информацию во вторичной таблице, также получив возможность поддержки пользователей с несколькими банковскими счетами, зарегистрированными в системе. Это не было почему я это сделал, учтите).
Во всем этом также учитывают время и деньги. Выполнение анализа, запуск модификаций и проверка их , а также любое время простоя, будет стоить чего-то и, возможно, даже увеличит затраты на обслуживание. Возможно - просто возможно - выбрасывание меньшего количества денег, чем это, на более быстрый диск или больший объем ОЗУ или более или более быстрых процессоров может привести к тем же улучшениям без необходимости изменять схему или базу кода.