@LaJokero

MySQL — 100 млн записей, разбиение на 2 таблицы или 1?

Всем доброго времени суток.

Есть БД, есть данные которые различаются по типу (категория). Возникает вопрос - хранить данные в одной таблице или разбить эти данные на две таблицы по типу (категории). То есть в первом случае будет одна целая таблица, с 100 млн записей, либо две таблицы по 50 млн в каждой. Естественно, с индексами и в первом, и во втором случае. Что будет лучше с точки зрения оптимизации и скорости (учитывая, что на данном этапе memcache и redis нет)?
  • Вопрос задан
  • 486 просмотров
Решения вопроса 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Добавляете в одну таблица индекс на своё поле категория и получаете таблицу разбитую на две виртуальные части, при запросах с категорией будет использоваться этот индекс, что и так само собой отсекает вторую половину таблицы.

Зачем разбивать одни данные на две таблицы-то? Почему не на 5 таблиц, чтобы еще один столбец раскидать на разные таблицы, так до бесконечности можно усложнять и будет какая-то каша.

Что будет лучше с точки зрения оптимизации и скорости

На выходе всё в итоге зависит от того что за данные, что с ними делаете, как читаете, как часто читаете/пишете и т.д.
т.е. всё индивидуально. При этом есть индексы и партиции которые решают все эти вопросы, особенно на таком малом объёме данных.

100кк записей это не так много.
Ответ написан
@AcckiyGerman
Александр Аксентьев я так понимаю там одним индексом не обойдешься, скорее всего нужно фильтровать еще по другим полям - значит нужен будет сложный индекс, и при этом правильный (зависит от порядка выполнения запроса).
LaJokero , надеюсь про Нормализацю данных вы уже знаете. Далее читайте вот это: https://ruhighload.com/%D0%98%D0%BD%D0%B4%D0%B5%D0...
Далее пробуйте разные индексы и тестируйте производительность (напишите тест скрипт для этого, который сбрасывает кеши (дисковый и БД)) - естественно, на тестовом сервере, потому что добавление или удаление индекса на таблице такого размера может заблокировать ее на пару часов.

Разделить таблицу тоже можно, но, не зная структуры таблиц и ваши SQL запросы - советовать сложно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы