У меня есть таблица с 50 млн записей. В ней есть столбец section_name.
Можно было бы его сделать справочником, но я пока не знаю все возможные его значения, поэтому наверно лучше нормализацией не заниматься.
Однако в меню мне нужно отображать все уникальные значения из него. DISTINCT делать по нему крайне долго. Получается нужна какая-то таблица которая пересчитывается постоянно.
Вопросы.
1. Как подобные таблицы правильно называются? Сводные? Расчетные? ...
2. На сколько тут MATERIALZED VIEW подойдет или лучше что-то другое?
3. Какой самый простой механизм выполнения пересчета подобных таблиц?
Можно было бы его сделать справочником, но я пока не знаю все возможные его значения, поэтому наверно лучше нормализацией не заниматься.
Вот уж точно не причина. Ничто не мешает по появлении нового значения тут же добавить его в словарь. Причём это можно делать и автоматически.
Однако в меню мне нужно отображать все уникальные значения из него. DISTINCT делать по нему крайне долго. Получается нужна какая-то таблица которая пересчитывается постоянно.
Всё вышеописанное - это не повод делать через задницу. Нормализуйте структуру. Заодно настоятельно рекомендую и всю остальную структуру проанализировать - вряд ли это был единственный косяк.
Akina, Сейчас производится парсинг данных.Данных много. Могут появляться новые секции.
Соответственно у меня идет десятки тысяч вставок в час. Если делать доп-проверки есть ли нужная запись в справочнике это сильно снизит производительность. Как можно в моем случае нормализовать структуру?
Не смешно. 100 тыс. вставок в час - это 30 запросов в секунду, для более-менее сервера вообще ниачём.
Если делать доп-проверки есть ли нужная запись в справочнике это сильно снизит производительность.
Это Вы на потолке подсмотрели? я про "сильно"... При правильно построенном запросе и правильном индексировании разница будет максимум в несколько процентов. А может и вообще не определяться.
Как можно в моем случае нормализовать структуру?
Структуру, которую никто, кроме Вас, не видел? Вы серьёзно?