gpt4 book ai didi

SQL 过滤索引 : should I always put a filter on an index for optional columns?

转载 作者:行者123 更新时间:2023-12-04 04:22:40 25 4
gpt4 key购买 nike

对于“大”表,是否有任何理由不对可选列的索引进行过滤?

因此,对于列 AAA 上的索引(因为人们可以搜索 AAA),我可以将过滤器设置为 ([AAA] IS NOT NULL) .这样可以节省存储空间,因此可以节省资金。

来自 technet 的更多优势:

  • 提高查询性能和计划质量
  • 降低索引维护成本
  • 降低索引存储成本

  • 人们说对大部分为空的列的索引进行过滤是很好的。但是,为什么我不对 1% 之类的空列的索引设置过滤器呢?如果它只有优点,有什么理由不这样做吗?

    最佳答案

    这通常是一个有两个陷阱的好主意:

  • 表设计器有一个错误(仅在 Denali 之前!)。当它重建一个表时,它会删除所有过滤器。
  • 确保优化器可以静态地告知您的谓词永远不会允许返回空行。通常情况下,这是因为 SQL NULL 语义(似乎是它们帮助而不是阻碍的唯一情况)。示例:select distinct col from T不会使用索引,因为可能会发现空值。使用这个:select distinct col from T where col is not null .

  • 过滤索引未得到充分利用。它们甚至可用于使可为空的列唯一。

    我的实用建议:只需尝试几个月,如果还有其他不可预见的问题,请自行了解。

    如果您正在使用高级 SQL Server 查询技术,还可以查看索引 View 。它们是过滤索引的 super 集(至少在 Enterprise 上)。

    关于SQL 过滤索引 : should I always put a filter on an index for optional columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548416/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com