我在我的数据库表中包含500万条记录:优化性能 - 索引
CREATE TABLE [dbo].[PurchaseFact](
[Branch] [int] NOT NULL,
[ProdAnal] [varchar](30) NULL,
[Account] [varchar](12) NULL,
[Partno] [varchar](24) NULL,
[DteGRN] [date] NULL,
[DteAct] [date] NULL,
[DteExpect] [date] NULL,
[OrderNo] [bigint] NULL,
[GRNNO] [varchar](75) NULL,
[SuppAdv] [varchar](75) NULL,
[Supplier] [varchar](12) NULL,
[OrdType] [varchar](4) NULL,
[UnitStock] [varchar](4) NULL,
[OrderQty] [float] NULL,
[RecdQty] [float] NULL,
[Batch] [varchar](100) NULL,
[CostPr] [float] NULL,
[Reason] [varchar](2) NULL,
[TotalCost] [float] NULL,
[Magic] [bigint] IDENTITY(1,1) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Magic] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
正如你可以从上面看到的 - 一个CLUSTERED INDEX
正在对MAGIC
列使用这是一个UNIQUE
栏。
数据检索时间为以下SELECT statement
是远远超过,这导致生成的问题8分钟:
SELECT Branch,
Supplier,
ProdAnal,
DteGRN AS Date,
PartNo AS Partno,
OrderNo,
OrderQty,
TotalCost,
CostPr
FROM dbo.PurchaseFact src
WHERE YEAR(DteGRN) = 2016
剔除WHERE clause
也不会使查询跑得更快。 我都试过了,与CLUSTERED index
一起包括在希望它会运行得更快,但无济于事一个UNIQUE index
:
CREATE UNIQUE INDEX Unique_Index ON dbo.PurchaseFact ([Branch], [Supplier], [Magic])
INCLUDE ([ProdAnal], [Account], [Partno], [DteAct], [DteExpect], [OrderNo], [GRNNO],
[SuppAdv], [OrdType], [UnitStock])
有什么办法,我可以在这个表上优化性能的时间,或者我应该诉诸归档旧数据?
任何意见将不胜感激。
2016年返回多少行?数据传输可能需要一些时间。 – jarlh
你可以添加一个持续计算的列来做那年的计算吗?然后,您可以在此字段中添加非聚集索引并包含其他字段。 –
@jarlh - 返回的1,600万条记录。 – PKirby