在Server中创建索引的新方法。假设我有3列A, B, C,其中没有一列是我的主键。我正在使用WHERE子句创建许多查询,这些子句包含这些子句的任意和所有组合。因此,一些WHERE条款可能只包括A,其他A和B,其他B和C,一些全部三种,等等。
发布于 2016-02-18 14:41:51
您可以在上创建(A, B, C)复合索引,但前提是查询始终使用该索引的n最左边的列,即:
WHERE子句中的所有三列进行查询。A和BA(A, B, C)上的复合索引将而不是用于查询:
B和CBC如果您有类似的查询,那么可以,您可能需要在每个列上分别创建三个单独的索引。
但请记住:虽然索引可能会加快查询速度,但总是会导致INSERT、UPDATE和DELETE上的维护开销(因为索引必须与表中的实际数据保持同步)。
所以较少的指数是更好的-不要超过索引!这往往比没有指数更糟糕.
发布于 2016-02-18 14:44:50
2)包含列仅用于数据的存储和返回,对滤波器的速度没有影响。但是,您可以使用它们来避免访问表本身(少一个索引搜索)。例如,如果您选择列F,其中A,B被过滤,您可以创建索引( (A,B) include (F)),它的速度就像(A,B)是表上的主键一样快。F然而,数据库中的数据将增加一倍。
1)这一切都取决于您到底在做什么,表中有多少行等等。通常,如果您总是选择多行,则索引将无助于您--例如,如果您选择1000行,它们将被忽略。原因是SQL Server在索引中搜索之后,需要分别搜索另一个(主键)索引中的每一行,而只从上到下搜索整个表速度更快。
如果SELECT返回一行或几行,marc_S的答案是适用的。
https://stackoverflow.com/questions/35484224
复制相似问题