表大小32GB 行数250M如何提高SQL Server查询性能
表DDL
CREATE TABLE Orders
(
ID [int] IDENTITY(1,1) NOT NULL,
server [varchar](50) NULL,
server_id [int] NOT NULL,
merchant_id [int] NOT NULL,
order_id [int] NOT NULL,
customer_id [int] NOT NULL,
customer_name [varchar](50) NULL,
[amount] [money] NULL,
order_date [smalldatetime] NULL,
ship_date [smalldatetime] NULL,
order_status [varchar](50) NULL,
custom_field_1 [varchar](50) NULL,
custom_field_2 [varchar](50) NULL,
custom_field_3 [varchar](50) NULL,
custom_field_4 [varchar](50) NULL,
created_at [datetime] NULL
CONSTRAINT [PK_Orders]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我有以下的非聚集索引
merchant_id, order_id
order_date
从逻辑上讲,order_id
,merchant_id
做一个独特的钥匙。
像下面简单的查询需要近30分钟。
select
sum(amount)
from
Orders
where
Order_Date >= getdate() - 7
我有几个问题:
- 是的PK吗?目前它在ID字段上,并没有被用于任何事情。
- 将使得
order_id
和merchant_id
在性能PK的帮助? - 什么是理想的指标,我应该对这个表?
您应该在'Order_Date'上创建一个索引,如果它包含'amount',则更好。 – Lamak
什么是查询计划? – Paurian
注意到您的表的大小和行数,您可能需要采取SqlZim建议的操作,并根据写入该表的流量来定期重建索引以减少碎片。 – Paurian