Конструкция базы данных SQL: дополнительная таблица против дополнительного столбца первичного ключа - PullRequest
0 голосов
/ 25 октября 2018

Я хочу оптимизировать дизайн базы данных PostgreSQL.

В настоящее время у меня есть одна таблица со следующими столбцами:

name  - char(4)
color - char(6)
key   - text
value - real[]
  • первичный ключ состоит из нескольких полей (имя, цвет,ключ)
  • У меня около 300-400 имен.
  • каждое имя имеет 2000 различных цветов
  • каждый цвет имеет 40000 различных пар ключ-значение
  • , поэтомукаждое имя имеет 2000 x 40000 = 80000000 строк
  • Я не обновляю строки
  • Я вставляю новые строки только при заполнении базы данных

Скорость запроса важнадля меня:

SELECT value FROM table WHERE name = x AND color = y AND key = z;

Должен ли я создать новую таблицу для каждого имени вместо того, чтобы помещать все имена в одну таблицу?

Должен ли я сопоставить 2000 символов char (6) с 2000 цветов smallint?

Что еще я могу сделать, чтобы улучшить дизайн базы данных?

1 Ответ

0 голосов
/ 25 октября 2018

Размер таблицы не должен быть проблемой, и разделение таблицы на несколько таблиц не улучшит скорость вашего запроса.

Если вы действительно хотите разбить таблицу, вы должны рассмотреть возможность разбиения списка, но это будет хорошо работать, только если во всех запросах есть WHERE name = ....Разделение замедлит ваш запрос, потому что PostgreSQL должен учитывать все разделы при планировании (или выполнении в v11).

Разделение полезно только в том случае, если вы хотите массово удалить данные из таблицы и можете удалить разделсделать это.Он также может ускорить запросы, которые выполняют последовательное сканирование на одном или нескольких разделах.

Я бы просто оставил таблицу как есть.Индекс первичного ключа уже идеально подходит для вашего запроса, и я не думаю, что вы можете добиться большего успеха.Помните, что размер запроса не влияет на скорость запроса, если вы используете индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...