SQL Server: оптимальные стратегии индексации для объединения "многие ко многим"

Допустим, у меня есть две таблицы, items а также storesс первичными ключами item_id а также store_id соответственно. Так как здесь есть отношение многие ко многим, у меня также есть промежуточная таблица, items_stores, с обоими item_id а также store_id колонны. Таким образом, я могу выполнить два моих основных вида запросов: (A) найти все товары в магазине и (B) найти все магазины, в которых есть товар.

Все идет нормально. Теперь я хотел бы поставить один или несколько индексов items_stores чтобы ускорить мои запросы. Учитывая эти виды запросов, я должен создать два отдельных индекса одного столбца (item_id а также store_id) или один или несколько многостолбцовых индексов? Я говорю больше, потому что знаю, что столбцы в индексе SQL-сервера доступны слева направо, поэтому потенциально могут быть оба <item_id, store_id> а также <store_id, item_id>,

1 ответ

Решение

Если вы новичок в индексации (черт возьми, даже если нет), я бы просто запустил примерный план выполнения для ваших общих запросов и создал предложенные индексы. Следите за дисковым пространством и производительностью вставки / обновления данных.

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

Соедините это с небольшим чтением, и вы быстро освоитесь и начнете думать об оптимизации.

Вам также нужно подумать о фрагментации и перестройке индексов. Это можно автоматизировать с помощью хранимых процедур T-SQL, так что вы можете в большинстве случаев установить и забыть об этом.

Вот несколько полезных ссылок:

https://www.red-gate.com/simple-talk/sql/learn-sql-server/sql-server-index-basics/?article=610

https://www.red-gate.com/simple-talk/sql/performance/14-sql-server-indexing-questions-you-were-too-shy-to-ask/

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes

Другие вопросы по тегам