如何解决是否有一个索引索引没有很多不同值的数据库列?
| 例如,假设我有一个TYPE列,它仅包含几个值。我有诸如WHERE TYPE=...
为该列建立索引会改善性能吗?
解决方法
如果列的选择性非常低(即没有太多不同的值),则查询优化器不太可能利用该列上的索引。
但是,假设您有一个
Active
列(或其他具有很少不同值的列),并且大多数记录处于活动状态,而只有少数记录处于非活动状态(即Active
等于ѭ3then),那么条件为WHERE Active = False
的查询可能会使用索引Active
栏。 [对于SQL Server,截止点大约是行的10%]
多个列索引中还有其他启发式方法(取决于您的RDBMS)
例如:SQL Server索引:首先使用低选择性BIT列可能是最好的策略(感谢Damien)
从SQL Server 2008开始,可以为数据子集创建“过滤索引”:
当一列只有少量时
有关查询的相关值,您
可以在
值的子集。例如,当
列中的值大多为NULL
该查询仅从
非NULL值,您可以创建一个
非NULL数据的过滤索引
行。结果索引将是
体积较小,维护成本低于
全表非聚集索引
在相同的键列上定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。