SQL Server创建视图索引,其中包含distinct或group by

BBu*_*rke 5 sql-server indexed-view sql-server-2008

我的SQL服务器数据库中有一个地址数据表.此表未规范化,因此它包含许多重复的地址.可以通过Id字段识别每个唯一地址(这些ID经常在表中重复).

所以我在表上创建了一个视图,使用原始表中的Select Distinct(AddressId)提取所有唯一的地址.

现在我想在这个视图上创建一个索引以提高搜索速度,但是SQL服务器不允许我在视图上创建一个索引,因为它包含一个不同的或分组的(我已经试过看看它是否会允许我创建索引)

有人有解决方案吗?或任何其他方式来执行此操作.

我需要根据地址关键字查询此视图,并根据匹配计数返回一个,我有这个查询,我试图通过索引视图中的字段来加快它.

SQL Server 2008

SELECT      
    AddressId,  
    AddressNumber,  
    AddressName, 
    Town, 
        City,
        Country,
    COUNT_BIG(*) As AddCount--,
    --TRIM(AddressNumber + ' ') + LTRIM(AddressName + ' ')  + LTRIM(Town + ' ') + RTRIM(City + ' ') AS AddressLookup
FROM
    [Address] A
GROUP BY
    AddressId,
    AddressNumber, 
    AddressName, 
    Town, 
    City, 
    Country
Run Code Online (Sandbox Code Playgroud)

是我的查询....

如果我用AddressLookup取出列,我可以添加索引

干杯

Dan*_*haw 1

您可以GROUP BY在索引视图中使用,只要:

如果指定了 GROUP BY,则视图选择列表必须包含 COUNT_BIG(*) 表达式,并且视图定义不能指定 HAVING、ROLLUP、CUBE 或 GROUPING SETS。

摘自MSDN

包含但忽略必要的 COUNT_BIG(*) 列。