假设我有两个表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>
。
答案 0 :(得分:1)
如果您不熟悉索引(即使您不是,那么我也会这样做)我会在您的常见查询上运行估计的执行计划并创建建议的索引。密切关注磁盘空间和数据插入/更新性能。
我倾向于使用所有新查询执行此操作,使用轻微的代码变体多次运行执行计划,以在查询性能和插入/更新速度之间找到正确的平衡。
将这一点与阅读相结合,您将很快掌握它并开始考虑优化。
您还需要考虑碎片和重建索引。这可以通过T-SQL存储过程自动执行,因此您可以设置并忘记它。
以下是一些有用的链接:
https://www.red-gate.com/simple-talk/sql/learn-sql-server/sql-server-index-basics/?article=610