SQL Server:多对多连接的最佳索引策略

时间:2017-10-19 21:32:04

标签: sql sql-server database-indexes

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

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

1 个答案:

答案 0 :(得分: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#TsqlProcedureFrag