该查询正在执行3'(选择非索引视图)执行,我想知道你们是否知道可以优化什么?
SELECT
*
FROM
(
SELECT
*,
DENSE_RANK() OVER (ORDER BY cmd.OrderYear, cmd.OrderSequence) R2
FROM
(
SELECT
Project1.*
FROM
(
SELECT Extent1.*
FROM
[WS].[viewOrderDetail] AS [Extent1]
WHERE
[Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]
) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Year=[cmd].OrderYear AND [orders].[Sequence]=[cmd].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].[OrderYear] = [Cmd].[OrderYear] AND OrderLines.OrderSequence = Cmd.OrderSequence )
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderYear = OrderLines.OrderYear AND Supp.OrderSequence = OrderLines.OrderSequence AND Supp.OrderLineSequence= OrderLines.Sequence)
WHERE CAST(Cmd.OrderYear as varchar(3)) +'.'+ right('000000' + CAST(Cmd.OrderSequence as varchar(6)),6) LIKE '%11301%'
) a
WHERE R2 >= (1 + 0) AND R2 < (1 + 20)
union all
SELECT
*
FROM
(
SELECT
*,
DENSE_RANK() OVER (ORDER BY cmd.OrderYear, cmd.OrderSequence) R2
FROM
(
SELECT
Project1.*
FROM
(
SELECT Extent1.*
FROM
[WS].[viewOrderDetail] AS [Extent1]
WHERE
[Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]
) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Year=[cmd].OrderYear AND [orders].[Sequence]=[cmd].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].[OrderYear] = [Cmd].[OrderYear] AND OrderLines.OrderSequence = Cmd.OrderSequence )
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderYear = OrderLines.OrderYear AND Supp.OrderSequence = OrderLines.OrderSequence AND Supp.OrderLineSequence= OrderLines.Sequence)
WHERE Orders.Reference LIKE '%11301%'
) a
WHERE R2 >= (1 + 0) AND R2 < (1 + 20)
union all
SELECT
*
FROM
(
SELECT
*,
DENSE_RANK() OVER (ORDER BY cmd.OrderYear, cmd.OrderSequence) R2
FROM
(
SELECT
Project1.*
FROM
(
SELECT Extent1.*
FROM
[WS].[viewOrderDetail] AS [Extent1]
WHERE
[Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]
) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Year=[cmd].OrderYear AND [orders].[Sequence]=[cmd].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].[OrderYear] = [Cmd].[OrderYear] AND OrderLines.OrderSequence = Cmd.OrderSequence )
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderYear = OrderLines.OrderYear AND Supp.OrderSequence = OrderLines.OrderSequence AND Supp.OrderLineSequence= OrderLines.Sequence)
WHERE OrderLines.Reference LIKE '%11301%'
) a
WHERE R2 >= (1 + 0) AND R2 < (1 + 20)
union all
SELECT
*
FROM
(
SELECT
*,
DENSE_RANK() OVER (ORDER BY cmd.OrderYear, cmd.OrderSequence) R2
FROM
(
SELECT
Project1.*
FROM
(
SELECT Extent1.*
FROM
[WS].[viewOrderDetail] AS [Extent1]
WHERE
[Extent1].CustomerID IN (2,7,8,9)
) AS [Project1]
) AS [Cmd]
LEFT JOIN [WS].[viewOrders] AS [orders] ON ([orders].Year=[cmd].OrderYear AND [orders].[Sequence]=[cmd].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines] ON ([OrderLines].[OrderYear] = [Cmd].[OrderYear] AND OrderLines.OrderSequence = Cmd.OrderSequence )
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp] ON (Supp.OrderYear = OrderLines.OrderYear AND Supp.OrderSequence = OrderLines.OrderSequence AND Supp.OrderLineSequence= OrderLines.Sequence)
WHERE CAST(OrderLines.OrderYear as varchar(4)) +'.'+ right('000000' + CAST(OrderLines.OrderSequence as varchar(6)),6)+'.'+right('000'+cast(OrderLines.Sequence as varchar(3)),3) LIKE '%11301%'
) a
WHERE R2 >= (1 + 0) AND R2 < (1 + 20)
ORDER BY a.DeliveryDate DESC
我真的需要减少执行该查询的时间。有任何想法吗 ?
答案 0 :(得分:0)
尝试使用以下查询..我刚修改了您的查询,无法测试它,因为我没有详细的架构信息。
;WITH cte_1
AS
(SELECT Extent1.*, DENSE_RANK() OVER (ORDER BY [Extent1].OrderYear
,[Extent1].OrderSequence) R2
FROM [WS].[viewOrderDetail] AS [Extent1]
WHERE [Extent1].CustomerID IN (2,7,8,9)
AND CAST([Extent1].OrderYear as varchar(3)) +'.'+ right('000000' + CAST([Extent1].OrderSequence as varchar(6)),6) LIKE '%11301%')
, cte_2
AS
(SELECT Extent1.*, DENSE_RANK() OVER (ORDER BY [Extent1].OrderYear
, [Extent1].OrderSequence) R2
FROM [WS].[viewOrderDetail] AS [Extent1]
LEFT JOIN [WS].[viewOrders] AS [orders]
ON ([orders].Year=[Extent1].OrderYear AND [orders].[Sequence]=[Extent1].OrderSequence)
WHERE [Extent1].CustomerID IN (2,7,8,9)
AND Orders.Reference LIKE '%11301%')
, cte_3
AS
(SELECT Extent1.*, DENSE_RANK() OVER (ORDER BY [Extent1].OrderYear
, [Extent1].OrderSequence) R2
FROM [WS].[viewOrderDetail] AS [Extent1]
LEFT JOIN [WS].[viewOrders] AS [orders]
ON ([orders].Year=[Extent1].OrderYear AND [orders].[Sequence]=[Extent1].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines]
ON ([OrderLines].[OrderYear] = [Extent1].[OrderYear] AND OrderLines.OrderSequence = [Extent1].OrderSequence )
WHERE [Extent1].CustomerID IN (2,7,8,9)
AND OrderLines.Reference LIKE '%11301%')
, cte_4
AS
(SELECT Extent1.*, DENSE_RANK() OVER (ORDER BY [Extent1].OrderYear
, [Extent1].OrderSequence) R2
FROM [WS].[viewOrderDetail] AS [Extent1]
LEFT JOIN [WS].[viewOrders] AS [orders]
ON ([orders].Year=[Extent1].OrderYear AND [orders].[Sequence]=[Extent1].OrderSequence)
LEFT JOIN [WS].[viewOrderLines] AS [OrderLines]
ON ([OrderLines].[OrderYear] = [Extent1].[OrderYear] AND OrderLines.OrderSequence = [Extent1].OrderSequence )
LEFT JOIN [WS].[viewOrderLineSupplements] AS [Supp]
ON (Supp.OrderYear = OrderLines.OrderYear AND Supp.OrderSequence = OrderLines.OrderSequence AND Supp.OrderLineSequence= OrderLines.Sequence)
WHERE [Extent1].CustomerID IN (2,7,8,9)
AND CAST(OrderLines.OrderYear as varchar(4)) +'.'+ right('000000' + CAST(OrderLines.OrderSequence as varchar(6)),6)+'.'+right('000'+cast(OrderLines.Sequence as varchar(3)),3) LIKE '%11301%')
SELECT *
FROM cte_1 a
WHERE a.R2 >= (1 + 0) AND a.R2 < (1 + 20)
UNION ALL
SELECT *
FROM cte_2 a
WHERE a.R2 >= (1 + 0) AND a.R2 < (1 + 20)
UNION ALL
SELECT *
FROM cte_3 a
WHERE a.R2 >= (1 + 0) AND a.R2 < (1 + 20)
UNION ALL
SELECT *
FROM cte_4 a
WHERE a.R2 >= (1 + 0) AND a.R2 < (1 + 20)
ORDER BY a.DeliveryDate DESC