值很少的SQL Server索引

值很少的SQL Server索引,sql,indexing,Sql,Indexing,我有大约100GB的中型数据库,它包含主表,很少有外部表。我在这个主表上有几个索引 我的问题是,我在WHERE子句中使用的一列只能包含8个值,从0到7,因为值很少,为该列创建索引是有效的还是浪费存储 谢谢。如果您有一个包含许多行的大表,那么将搜索范围缩小到八分之一行是非常值得做的事情。在此基础上的改进是拥有另一个可以进一步缩小范围的领域。因此,如果where子句具有where Field1=4和Field2=x,则使用Field1和Field2创建索引将有所帮助。即使Field2也只有8个可能的

我有大约100GB的中型数据库,它包含主表,很少有外部表。我在这个主表上有几个索引

我的问题是,我在WHERE子句中使用的一列只能包含8个值,从0到7,因为值很少,为该列创建索引是有效的还是浪费存储


谢谢。

如果您有一个包含许多行的大表,那么将搜索范围缩小到八分之一行是非常值得做的事情。在此基础上的改进是拥有另一个可以进一步缩小范围的领域。因此,如果where子句具有where Field1=4和Field2=x,则使用Field1和Field2创建索引将有所帮助。即使Field2也只有8个可能的值,现在您已经将搜索范围缩小到表的四分之一,当然,假设每个值都以大约相同的概率出现

在您的例子中,这个假设似乎不成立,至少对于Field1来说是这样,但要搜索的段数仍然是4*8=32,而不是1

执行定时测试,以获得一些实际数据进行比较。这实际上是确定一个索引在多大程度上提高了性能,甚至它是否真的提高了性能的唯一方法


这些是一般性的答案,但没有更多的细节,这就是我们所能提供给您的。

除非8个值的分布有很大的偏差,否则您最好到别处看看。哪些RDBMS?与索引一般一样,它取决于您如何使用表。似乎没有不编制索引的内在原因,但如果没有更多的信息,就很难确定。嗯,我主要使用许多索引来搜索我的数据,如数据时间、stc…,但我使用此特定列主要用于GROUP BY子句和WHERE子句。对于8个值,通常使用4个值,其他值很少使用。