gro*_*chu 1 index sql-server nonclustered-index
我有疑问:
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。你能给点建议吗?
小智 9
过滤索引隔离了其中 的行集L2 = ''。您的查询要求获取整个行子集(匹配的行是表的子集,也是索引中的所有行)并将它们与子句聚合GROUP BY。您可以通过查看整个过滤索引(或者换句话说扫描它)来完成此操作,尤其是因为它覆盖了该查询。如果您要扫描过滤后的索引,那么在这种情况下这是最佳做法。
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |