Индексирование TenantID в многопользовательской БД - PullRequest
3 голосов
/ 16 ноября 2011

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

Мой вопрос заключается в том, должен ли каждый TenantID в каждой таблице индексироваться для оптимизированного поиска, поскольку каждый запрос в БД будет фильтроваться в этом столбце?

Ждем любогосовет.

Спасибо

Ответы [ 2 ]

5 голосов
/ 16 ноября 2011

Несмотря на то, что при индексации необходимо учитывать множество факторов, по моему опыту (уникальный) кластеризованный индекс работает хорошо tenantId + PK Все запросы PK могут выполняться по составному ключу.

Это имеет дополнительное преимущество, заключающееся в добавлении tenantID в ваши некластеризованные индексы, поскольку SQL Server использует кластерный ключ в качестве ссылки на таблицу из некластеризованных индексов.

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

Удачи.

0 голосов
/ 16 ноября 2011

Для каждого запроса, который использует мультитенантную природу вашего дизайна, вы захотите иметь индекс, который включает tenantId. Вопрос в том, где в структуре индекса должен присутствовать tenantId? Ответ, конечно, зависит. Попробуйте построить индекс так, чтобы поле с наибольшей избирательностью было первым.

Например, предполагая таблицу с равномерным распределением по штатам (50) и с 10 арендаторами, я построил бы индекс как State, затем TenantId; для той же таблицы с 1000 арендаторов я бы построил индекс TenantId, затем State.

На практике оба индекса пригодятся (пусть оптимизатор разберется).

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