Sql 在易变性较小的字段上创建索引有意义吗?
我听人说,当字段的可变性较小时,创建索引是没有意义的。Sql 在易变性较小的字段上创建索引有意义吗?,sql,sql-server-2005,tsql,indexing,performance,Sql,Sql Server 2005,Tsql,Indexing,Performance,我听人说,当字段的可变性较小时,创建索引是没有意义的。 例如,如果它只存储A、B、C、D值,那么拥有这样的索引并没有什么好处,而且更多的SQL server在执行查询时根本不会使用它 我想知道你对那件事的看法 编辑 样本使用 Select * FROM Table WHERE Status = 'A' -- A means Active 或与其他领域相结合 Select * FROM Table WHERE Group_ID = 123 AND Status = 'A' 一般的建议
例如,如果它只存储A、B、C、D值,那么拥有这样的索引并没有什么好处,而且更多的SQL server在执行查询时根本不会使用它 我想知道你对那件事的看法 编辑 样本使用
Select * FROM Table WHERE Status = 'A' -- A means Active
或与其他领域相结合
Select * FROM Table WHERE Group_ID = 123 AND Status = 'A'
一般的建议是,字段上的索引很少有用 对于高基数数据(即具有许多可能值的列,其中列中的数据是唯一的或几乎唯一的)最有效 一些数据库引擎,如Oracle和PostgreSQL,支持。位图索引传统上被认为适用于性别(男性或女性)等数据,这些数据具有少量不同的值,但这些值出现的次数很多
更新: 关于示例用法,请注意,对于第二个查询,在
Group\u ID
上建立索引可能就足够了
这是第一个查询,你应该考虑如何限制结果。这还取决于您计划运行此查询的频率。在某些情况下,完整的表格扫描可能是唯一的选择。
如果另一种选择是表格扫描,那么如果它是一个大的表格,那么它可能是值得的,但是看看是否有可能使它成为一个更大的表,以获得更多的好处。您是否打算单独使用此列?像这样:SELECT TheCol FROM Mytable WHERE myCol = 'A'
如果不是,那么它将覆盖或复合,并且可能有利于包含此列的查询
没有更多的信息很难说
编辑:如果您正在执行选择*
操作,则所有下注都将被取消。但是,第二列的两列上的索引可能会有所帮助