小编gro*_*chu的帖子

为什么引擎选择 Index Scan 而不是 Index Seek 进行 Group By 查询?

我有疑问:

SELECT
      M_nvarchar_3
    , MA_nvarchar_40                    
    , W_nvarchar_4
    , LB_nvarchar_2               
    , SUM(ST_decimal_13_3)        
    , SUM(CW_decimal_13_3)
    , SUM(STO_decimal_13_3)    
    , MAX(GJ_nvarchar_7)     
FROM [dbo].[MES]
WHERE L2 = ''
GROUP BY M_nvarchar_3
         , MA_nvarchar_40                    
         , W_nvarchar_4
         , LB_nvarchar_2;
Run Code Online (Sandbox Code Playgroud)

我创建了NONCLUSTERED FILTERED INDEX这样的:

CREATE NONCLUSTERED INDEX IX_M_nvarchar_3_MA_nvarchar_40_W_nvarchar_4_LB_nvarchar_2
ON [dbo].[MES]
(
    M_nvarchar_3 ASC
    , MA_nvarchar_40 ASC
    , W_nvarchar_4 ASC
    , LB_nvarchar_2  ASC
   
)
INCLUDE
(
    ST_decimal_13_3
    ,CW_decimal_13_3
    , STO_decimal_13_3
    , GJ_nvarchar_7
)
WHERE L2 = '';
Run Code Online (Sandbox Code Playgroud)

并在上面的查询中有NONCLUSTERED INDEX SCAN。我想在这种情况下得到了NONCLUSTERED INDEX SEEK。你能给点建议吗?

index sql-server nonclustered-index

1
推荐指数
1
解决办法
595
查看次数

订购分区表的最佳方式是什么?

从分区表中获取有序数据的最有效方法是什么?

我有这样的疑问:

SELECT TOP (4000)
*
FROM dbo.MS
ORDER BY MANDT
, MBLNR
, MJAHR
, ZEILE
Run Code Online (Sandbox Code Playgroud)

表按 MBLNR 分区。

执行计划:https://www.brentozar.com/pastetheplan/? id=Bkhv5g5EF

是否有任何选项可以从执行计划中删除排序?

建表语句:

CREATE TABLE [dbo].[MS]
(
    [MANDT] [NVARCHAR](3) NOT NULL
    , [MBLNR] [NVARCHAR](10) NOT NULL
    , [MJAHR] [NVARCHAR](4) NOT NULL
    , [ZEILE] [NVARCHAR](4) NOT NULL
    , [LINE_ID] [NVARCHAR](6) NOT NULL
    , [PARENT_ID] [NVARCHAR](6) NOT NULL
    , [LINE_DEPTH] [NVARCHAR](2) NOT NULL
    , [MAA_URZEI] [NVARCHAR](4) NOT NULL
    , [BWART] [NVARCHAR](3) NOT NULL
    , [XAUTO] [NVARCHAR](1) NOT NULL
    , [MATNR] …
Run Code Online (Sandbox Code Playgroud)

order-by partitioning sql-server-2016

-2
推荐指数
1
解决办法
739
查看次数