У меня есть таблица базы данных, которая растет слишком большой (несколько сотен миллионов строк), которую нужно оптимизировать, но прежде чем я перейду к ее разбиению, я подумал, что задаю вопрос.Оптимальный метод оптимизации таблицы базы данных
Это использование:
0. Таблица содержит около 10 столбцов длиной около 20 байтов каждая.
ВСТАВКИ выполняются со скоростью сотни раз в секунду.
Операторы SELECT выполняются на основе столбца 'a' (где a = 'xxxx') несколько раз в час.
Операторы DELETE выполняются на основе столбца DATE. (удалять, если дата старше 1 года) обычно один раз в день.
Основным требованием является, чтобы ускорить INSERT и ВЫБРАТЬ заявления, и быть в состоянии сохранить исторические данные 1 год назад без блокировки всей таблицы вниз во время удаления.
Я бы предположил, что у меня должно быть два индекса: один для столбца 'a', а другой для поля даты. или можно оптимизировать оба?
Будет ли необходимый компромисс между скоростью по выбору и скоростью удаления?
Разделение единственного решения? Каковы хорошие стратегии для разбиения такой таблицы?
Я использую базу данных PostgreSQL 8.4.
но разбиение таблицы Года/Месяц оптимизирует для удаления вместо вставки/выбора, не так ли? – Pat
@Pat: он должен оптимизировать для обоих. Наличие небольших разделов улучшает вставки, и если для большинства запросов нужны только «текущие» данные, они также будут оптимизированы. Что касается выборок, которые действуют против всей таблицы (всех разделов), они уже будут обладать высокой стоимостью, что физическое разбиение должно быть незначительным. – LBushkin
Итак, если я правильно понимаю, разбиение, которое вы предлагаете, будет оптимизировать удаление и вставку, оно не сделает выбор хуже, потому что это уже плохо. Но требование - ускорить «вставляет и выбирает» вместо скорости «удаляет и вставляет». Или я что-то пропустил в вашем ответе? – Pat