Какова лучшая схема для индексации: комбинированный столбец varchar или несколько целочисленных столбцов? - PullRequest
0 голосов
/ 10 мая 2019

Я хочу улучшить схему таблицы. Эта таблица будет вставлять запись в микросекунду.

Таблица уже слишком большая, поэтому я не могу проверить саму таблицу.

Текущая настройка (столбцы id, name, one, two, three):

SELECT * 
FROM table
WHERE name = 'foo' 
  AND one = 1 
  AND two = 2 
  AND three = 3;

Возможно, в будущем (столбцы id, name, path):

SELECT * 
FROM table
WHERE
    name = 'foo' 
    AND path = '1/2/3';

Если я поменяю три integer столбца на один varchar столбец, будет ли SQL работать быстрее, чем сейчас?

  • Использование PostgreSQL

  • varchar длина будет 5 ~ 12. Я думаю, что могу использовать bigint с zerofill (1/2/3 до 1000010200003), что может быть быстрее, чем varchar.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Если я заменим три целочисленных столбца на один столбец varchar, будет ли SQL работать быстрее, чем сейчас?

Не заметно так.Вы можете оказать небольшое влияние на производительность, уравновешивая такие вещи, как:

  • Являются ли строковые столбцы большими или меньшими, чем целочисленные ключи (что приводит к незначительным большим или меньшим страницам данных и индексам)?
  • Является ли индекс для двух строк переменной длины менее эффективным, чем индекс для строки переменной длины и трех ключей фиксированной длины?
  • Соответствуют ли результаты тому, что вам нужно, или необходима дополнительная обработка после извлечения записи?

В любом случае доступный индекс будет использоваться для поиска строк, соответствующих условиям.Это поиск по индексу, потому что все сравнения равны.Postgres перейдет прямо к нужным вам строкам.За пределами сравнения индексов идет большая работа.

Вы описываете 1 000 000 вставок в секунду или 84 миллиона вставок в день - это много.При таких обстоятельствах вы не используете готовый экземпляр Postgres, работающий на вашем ноутбуке.Вы должны иметь надлежащую поддержку DBA, чтобы ответить на такой вопрос.

0 голосов
/ 10 мая 2019

Преждевременная оптимизация - корень всего зла.

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

Затем вы должны использовать комбинированный индекс для столбцов alk, в идеале сначала для необнуляемых и селективных столбцов.

Если вы хотите оптимизировать, используйте smallint, который занимает всего два байта.

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