我听说当字段变化较小时创建索引是没有意义的 例如,如果它只存储 A,B,C,D 值,则不会有这样的索引的好处,并且在执行查询时,更多的SQL服务器根本不会使用它。
我想知道你对此事的意见?
修改
样本用法
Select * FROM Table WHERE Status = 'A' -- A means Active
或与其他字段组合
Select * FROM Table WHERE Group_ID = 123 AND Status = 'A'
答案 0 :(得分:2)
一般建议是low-cardinality字段上的索引很少有用。
B-tree indexes对高基数数据最有效(即具有许多可能值的列,其中列中的数据是唯一的或几乎唯一的。)
某些数据库引擎(如Oracle和PostgreSQL)支持Bitmap Indexes。传统上,位图索引被认为适用于性别(男性或女性)等数据,这些数据具有少量不同的值,但很多都出现这些值。
更新:
除了示例用法之外,请注意,对于第二个查询,Group_ID
上的索引可能就足够了。
在第一个查询中,您应该考虑如何限制结果。它还取决于您计划运行此查询的频率。在某些情况下,全表扫描可能是唯一的选择。
答案 1 :(得分:1)
如果替代方案是表格扫描,那么如果它是一张大桌子,它可能是值得的,但是看看是否有可能使它成为covering index 以获得更多的好处。
答案 2 :(得分:0)
您是否会单独使用此专栏?像这样:
SELECT TheCol FROM Mytable WHERE myCol = 'A'
如果没有,那么它将覆盖或复合,并可能使包含此列的查询受益。
没有更多信息很难说
编辑:如果你正在进行SELECT *
,所有投注都会被取消。但是,第二列的两列索引可能有所帮助。