Индексирование многопользовательской базы данных

#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. Пожалуйста, не задавайте один и тот же вопрос на нескольких форумах.