首页 > 解决方案 > xml 上的自加入慢

问题描述

我有一个表,其中提取了一些字段和一些 xml

每个产品都有一个 masterid,因此同一产品的所有颜色或尺寸都有相同的 masterid。我想输入任何变体并获取所有变体。

我通过这个找到masterID:

xml.value('(/product/attribute-list/attribute[@name="variation_master_product_id"]/value[@default="1"])[1]','char(11)') master

该表(部分)是这样的:

CREATE TABLE [dbo].[products_xml](
    [varenr] [varchar](14) NOT NULL,
    [ean] [varchar](30) NULL,
    [title] [varchar](100) NULL,
    [xml] [xml] NULL,
 CONSTRAINT [PK_xml] PRIMARY KEY CLUSTERED 
(
    [varenr] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

` 我正在为自加入做 CTE,以查找所有具有相同 master_ID 的产品

;with p as (SELECT [varenr]
,xml.value('(/product/attribute-list/attribute[@name="variation_master_product_id"]/value[@default="1"])[1]','char(11)') master
      ,[ean]
      ,[title]
      ,[xml]
  FROM [products_xml]
  ) select * from p p1 inner join p p2 
on p1.master=p2.master 
and p2.varenr like '277028%'

查询按预期工作,但速度非常慢,需要 10 秒才能在大约 8000 条记录上运行。

根据https://docs.microsoft.com/en-us/sql/relational-databases/xml/xml-indexes-sql-server?view=sql,我添加了主 XML 索引和 3 个辅助 XML 索引-server-2017但我不知道如何在这种情况下使用它们。

`

标签: xmltsql

解决方案


推荐阅读