SQL中具有大量数据的现有表的分区

问题描述

我有一个表,表中包含 2 个 cr 记录。我正在尝试根据月份和年份进行分区。

我尝试创建此表的文件组,但在我的场景中,该表在预编码部分的许多地方都使用。有什么方法可以让我对这个表进行分区并在 BI 报告中使用它,这样预编程就不会产生影响。

对于版本:- 我有以下非常基本的查询,但运行需要 10 分钟。

这是执行计划 - https://www.brentozar.com/pastetheplan/?id=B1dy0ZQ6d

谁能看到改进它的方法?让我知道一些示例数据/表结构是否有用。

E2E_TBL_LIQUIDITY_TRACKING_CFY_JUNE 有 899556 条记录 LQTFYopeningStock 有 934878 条记录 E2E_TBL_CPL_SALES_MR_008 有 131491 条记录 E2E_TBL_MATERIAL_MASTER 有 46 条记录 E2E_TBL_MATERIAL_MASTER 有 46 条主记录_2ebL5470条主记录_2ebL546条主记录_2eblL54条记录_2e主_54条记录_2eblL56条记录_2eblL56条主记录_2ebL3

以下是索引:-

CREATE NONCLUSTERED INDEX [Index1LQt] ON [dbo].[E2E_TBL_LIQUIDITY_TRACKING_CFY_JUNE]
(
    [Territory_Code] ASC
)
INCLUDE (   [Customer_Code],[Product_Code],[LOB_Code],[distributor_Stock],[Dealers_Stock],[L3_Price],[L1_Price],[L2_Price]) 
    WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,SORT_IN_TEMPDB = OFF,DROP_EXISTING = OFF,ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


CREATE NONCLUSTERED INDEX [Index2LQt] ON [dbo].[LQTFYopeningStock]
(
    [Customer_Code] ASC,[Product_Code] ASC,[Territory_Code] ASC,[LOB_Code] ASC
)
INCLUDE (   [StockValueL1],[StockValueL2],[StockValueL3]) WITH (PAD_INDEX = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [Index3LQt] ON [dbo].[LQTFYopeningStock]
(
    [Territory_Code] ASC
)
INCLUDE (   [Customer_Code],[StockValueL1],ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO



ALTER TABLE [dbo].[E2E_TBL_CPL_SALES_MR_008] ADD  CONSTRAINT [PK_MR008] PRIMARY KEY CLUSTERED 
(
    [Territory_Code] ASC,[Customer_Code] ASC,[Product] ASC,[SKU] ASC,[LOB] ASC
)WITH (PAD_INDEX = OFF,IGnorE_DUP_KEY = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

解决方法

您可以在没有多个文件组的情况下进行分区。理想情况下(出于性能原因)每个分区应该位于不同驱动器上的不同文件组中。但是分区可以正常工作(如果分区很大,通常会更慢_在单个文件组上。以后在文件组之间移动分区很容易。