首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL中正确使用多个索引( Server 2014)

在SQL中正确使用多个索引( Server 2014)
EN

Stack Overflow用户
提问于 2016-02-18 14:30:51
回答 2查看 55关注 0票数 4

在Server中创建索引的新方法。假设我有3列A, B, C,其中没有一列是我的主键。我正在使用WHERE子句创建许多查询,这些子句包含这些子句的任意和所有组合。因此,一些WHERE条款可能只包括A,其他A和B,其他B和C,一些全部三种,等等。

  1. 我应该为每个组合创建一个索引吗?
  2. 是否将这些列作为“包含列”(如https://msdn.microsoft.com/en-us/library/ms190806.aspx中的列)包括在内?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 14:41:51

您可以在上创建(A, B, C)复合索引,但前提是查询始终使用该索引的n最左边的列,即:

  • 始终使用WHERE子句中的所有三列进行查询。
  • 或者使用AB
  • 或者你只使用A

(A, B, C)上的复合索引将而不是用于查询:

  • 使用BC
  • 只有B
  • 只有C

如果您有类似的查询,那么可以,您可能需要在每个列上分别创建三个单独的索引。

但请记住:虽然索引可能会加快查询速度,但总是会导致INSERTUPDATEDELETE上的维护开销(因为索引必须与表中的实际数据保持同步)。

所以较少的指数是更好的-不要超过索引!这往往比没有指数更糟糕.

票数 4
EN

Stack Overflow用户

发布于 2016-02-18 14:44:50

2)包含列仅用于数据的存储和返回,对滤波器的速度没有影响。但是,您可以使用它们来避免访问表本身(少一个索引搜索)。例如,如果您选择列F,其中A,B被过滤,您可以创建索引( (A,B) include (F)),它的速度就像(A,B)是表上的主键一样快。F然而,数据库中的数据将增加一倍。

1)这一切都取决于您到底在做什么,表中有多少行等等。通常,如果您总是选择多行,则索引将无助于您--例如,如果您选择1000行,它们将被忽略。原因是SQL Server在索引中搜索之后,需要分别搜索另一个(主键)索引中的每一行,而只从上到下搜索整个表速度更快。

如果SELECT返回一行或几行,marc_S的答案是适用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35484224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档