SQL服务器:多对多连接的最佳索引策略

SQL Server: optimal indexing strategies for many-to-many join

假设我有两个 table,itemsstores,主键分别为 item_idstore_id。由于此处存在多对多关系,因此我还有一个中间 table、items_stores,同时包含 item_idstore_id 列。因此,我可以执行两种主要类型的查询:(A) 查找商店中的所有商品,以及 (B) 查找所有有商品的商店。

到目前为止,还不错。现在我想在 items_stores 上放置一个或多个索引来加速我的查询。鉴于这些类型的查询,我应该创建两个单独的单列索引(item_idstore_id),还是一个或多个多列索引?我说更多是因为我知道 SQL 服务器索引中的列是从左到右访问的,因此可能同时存在 <item_id, store_id><store_id, item_id>.

如果您是索引新手(见鬼,即使您不是)我只会 运行 对您的常见查询的估计执行计划并创建建议的索引。密切关注磁盘 space 和您的数据 insert/update 性能。

我倾向于对所有新查询执行此操作,运行多次调整执行计划,代码略有变化,以在查询性能和 insert/update 速度之间找到适当的平衡。

结合阅读一些内容,您将很快掌握它并开始考虑优化。

您还需要考虑分片和重建索引。这可以通过 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#TsqlProcedureFrag