zoukankan      html  css  js  c++  java
  • SQL Server ->> Computed Column计算列于Filter Index过滤索引的冲突

    今天本来想对一张数仓表做一个性能优化,方法是通过对一个常用的WHERE条件(COL1 IS NULL OR COLB = 0)创建一个计算列,然后对计算列添加索引从而优化性能。

    ALTER TABLE [dbo].[FactTable]
    ADD COMPCOL_FOR_INDEX_COL3 AS CASE WHEN COL1 IS NULL OR COLB = 0 THEN 1 ELSE 0 END PERSISTED
    GO
    
    CREATE NONCLUSTERED INDEX IX_FactTable_COMPCOL_FOR_INDEX_COL3 ON [dbo].[FactTable](COMPCOL_FOR_INDEX_COL3)
    WHERE COMPCOL_FOR_INDEX_COL3 = 1
    WITH(DATA_COMPRESSION=PAGE) GO

    但是上面的语句报错了

    Msg 10609, Level 16, State 1, Line 9
    Filtered index 'IX_FactTable1_COMPCOL_FOR_INDEX_COL3' cannot be created on table 'dbo.FactTable' because the column 'COMPCOL_FOR_INDEX_COL3' in the filter expression is a computed column. Rewrite the filter expression so that it does not include this column.

    原来SQL SERVER 不允许对计算列创建过滤索引,查了一下谷歌才知道,这个问题早在2009年就有人去microsoft connect给微软提了ticket,但是都1202年了,微软也没有计划优化这一点。那就没办法了。只好改掉语句。

    ALTER TABLE [dbo].[FactTable]
    ADD COMPCOL_FOR_INDEX_COL3 AS CASE WHEN COL1 IS NULL OR COLB = 0 THEN 1 ELSE 0 END PERSISTED
    GO
    
    CREATE NONCLUSTERED INDEX IX_FactTable_COMPCOL_FOR_INDEX_COL3 ON [dbo].[FactTable](COMPCOL_FOR_INDEX_COL3 DESC)
    WITH(DATA_COMPRESSION=PAGE)
    GO
  • 相关阅读:
    python 类的自定义属性
    好的設計模式
    sql server 过滤重复数据
    sql server 2000 sp3
    css
    SQL server 与Oracle开发比较(同事帮忙整理的,放这里方便查询)
    深圳 帮部门招聘人才
    BCP等三個sql server 過程
    CTE and CONNECT BY 樹的查詢(轉)
    继承System.Web.UI.Page的页面基类
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/14870243.html
Copyright © 2011-2022 走看看