提高透视视图性能
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 这可能是非常有益的。
在运行时可以计算的内容是有限的,特别是当你谈论一个非平凡的数据集时。
我有一个用于存储动态实体的键值结构(标准 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 这可能是非常有益的。
在运行时可以计算的内容是有限的,特别是当你谈论一个非平凡的数据集时。