#postgresql #database-indexes
#postgresql #база данных-индексы
Вопрос:
Наше многопользовательское приложение использует базу данных Postgres. Приложение было создано много лет назад, и теперь мы наблюдаем некоторые проблемы с производительностью при увеличении нагрузки.
Каждая имеющаяся у нас таблица базы данных имеет как минимум два индекса — Id (PK) и TenantId (FK). При каждом выборе мы добавляли фильтр TenantId, и когда мы извлекаем элемент по идентификатору, в предложение where также добавляется TenantId.
Теперь мой вопрос в том, что мы сделали это неправильно. Вместо добавления двух индексов мы должны были добавить index on (TenantId, Id), и это улучшило бы производительность наших запросов? Улучшило бы ли это оба сценария — при выборе с использованием TenantId и TenantId Id?
Комментарии:
1.Я не думаю, что составной индекс
(tenantid, id)
здесь сильно поможет. Когда вы фильтруете поid
(и необязательноtenantid
) индексуid
, должен быть более быстрый путь доступа, учитывая, чтоid
, будучи ключом, он должен быть гораздо более избирательным, чемtenantid
. Если вы фильтруете только поtenantid
id
, это все равно выходит за рамки. Но вы должны попробовать сами и посмотреть, принесет ли это пользу.2. Пожалуйста, не задавайте один и тот же вопрос на нескольких форумах.