gpt4 book ai didi

sql-server - SQL Server 为一列创建多个非聚集索引 vs 在一个索引中创建多个列

转载 作者:行者123 更新时间:2023-12-02 23:09:46 26 4
gpt4 key购买 nike

假设我有下表

  • UserID(身份)PK
  • 用户名 - 唯一非空
  • UserEmail - 唯一非空

为了获得最佳性能,推荐什么?

  • 分别为UserNameUserEmail创建非聚集索引

或者

  • 只有一个包含两列

请分享您的想法,为什么其中一个比其他更好。

最佳答案

另一个需要考虑的重要点是:只有在引用最左边的 n 列时(例如在 WHERE 子句中),才会使用复合索引(由多个列组成)。

因此,如果您有一个复合索引

(UserID, UserName, UserEmail)

那么这个索引可能用于以下场景:

  • 当您单独搜索 UserID 时(仅使用最左边的 1 列 - UserID)
  • 当您搜索 UserIDUserName(使用最左边的 2 列)时
  • 当您搜索所有三列时

但是这个单一复合索引将永远能够用于搜索

  • 只是UserName - 它是索引中的第二列,因此该索引无法使用
  • 只是 UserEmail - 它是索引中的第三列,因此该索引无法使用

请记住这一点 - 仅仅因为列是索引的一部分并不一定意味着该索引将支持并加速单独在该列上的搜索!

因此,如果您的使用模式和应用程序确实需要单独搜索 UserName 和/或 UserEmail(不提供其他搜索值),那么您必须 在这些列上创建单独的索引 - 仅单个复合索引将不会有任何好处。

关于sql-server - SQL Server 为一列创建多个非聚集索引 vs 在一个索引中创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com