提高透视视图性能

Improve pivot view performance

我有一个用于存储动态实体的键值结构(标准 EAV)。 我使用 Pivot 命令为此实体创建了一个视图。 我试图为这个视图设置索引,但由于使用了数据透视表,所以无法实现。

有没有办法在插入、更新时将我的数据拖入SQL? 因为性能对于这个数据来说非常重要。

CREATE VIEW View_Products WITH SCHEMABINDING
AS
SELECT [Children Bicycles], [Comfort Bicycles], [Cruisers Bicycles]
        , [Cyclocross Bicycles], [Electric Bikes], [Mountain Bikes], [Road Bikes]
FROM (
    SELECT category_name, product_id
    FROM dbo.production.products p
    INNER JOIN dbo.production.categories c ON c.category_id = p.category_id
) t
PIVOT (
    COUNT(product_id) FOR category_name IN (
        [Children Bicycles], [Comfort Bicycles], [Cruisers Bicycles]
        , [Cyclocross Bicycles], [Electric Bikes], [Mountain Bikes], [Road Bikes]
    )
) AS pivot_table

不是真的。除非你有非常愚蠢的 table 设计错误(你没有)或缺乏实际有意义的索引 - 你无能为力。

你能做的就是不使用 Pivot。 Pivot 是一个运行时结构,我曾多次遇到没有按需进行运行时计算的情况。 IE。您的 Vew_Products 是一个视图 - 但它可能是由触发器维护的 table。这会将性能从查询分配到插入/更新/删除(那里的影响很小) - 但最终这可能会从查询中取出很多性能。根据 Applicatoin 这可能是非常有益的。

在运行时可以计算的内容是有限的,特别是当你谈论一个非平凡的数据集时。