2016-10-20 68 views
0

创建使用带有身份日期 ON分区聚集主键,因为任务的分裂和截断旧的那30天分区的两个表。只保留最近的记录。关系,并与主键聚集索引表之间的连接

我有一个特殊的字段关联表,但加入即使索引也痛苦缓慢。你能建议如何优化?

下表和加入声明:

CREATE TABLE [dbo].[Redeem](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Ticket] [nvarchar](64) NOT NULL, 
    [CorrelationTicket] [nvarchar](64) NOT NULL, 
    [CreatedUTC] [datetime] NOT NULL, 
    [CreatedDate] [date] NOT NULL, 
    [Redeem fields here...] 
CONSTRAINT [PK_Redeem] PRIMARY KEY CLUSTERED 
(
    [CreatedDate] ASC, 
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 
ON myPS([CreatedDate]); 

CREATE NONCLUSTERED INDEX [IX_Redeem_CorrelationTicket] 
ON [dbo].[Redeem]([CreatedDate] ASC, [CorrelationTicket] ASC) 
ON [myPS] ([CreatedDate]); 

CREATE TABLE [dbo].[Validate](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Ticket] [nvarchar](64) NOT NULL, 
    [CorrelationTicket] [nvarchar](64) NOT NULL, 
    [CreatedUTC] [datetime] NOT NULL, 
    [CreatedDate] [date] NOT NULL, 
    [Validate fields here...] 
CONSTRAINT [PK_Validate] PRIMARY KEY CLUSTERED 
(
    [CreatedDate] ASC, 
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 
ON myPS([CreatedDate]); 

CREATE NONCLUSTERED INDEX [IX_Validate_CorrelationTicket] 
ON [dbo].[Validate]([CreatedDate] ASC, [CorrelationTicket] ASC) 
ON [myPS] ([CreatedDate]); 

这是加入:

SELECT top 100 
    v.*, 
    r.* 
from 
    Validate v 
LEFT OUTER join Redeem r 
    on v.CorrelationTicket = r.CorrelationTicket 
ORDER BY v.CreatedDate DESC 
+1

标记使用的dbms(可能是SQL Server?),以获得更好和正确的关注。 (很多非ANSI SQL ......) – jarlh

+0

为什么你的索引在两列上? ID已经是唯一的,我认为你的查询将受益于''CorrelationTicket''而不是'CorrelationTicket'和'CreatedDate'的索引***。另外请注意,你正在按'order by'的含义,为了获得前100名,整个结果集需要先订购。你还有什么理由让你加入内心?你只需要验证一切吗?我相信一般来说'inner'加入比非 – Kritner

+0

更快发布查询计划。 – RBarryYoung

回答

0

谢谢Krintner!

问题在于ORDER BY,正如你所建议的。它排序整个结果集(不知道为什么)。 我确实需要排序,但将索引更改为DESC的确有用。

我也遵循建议,并只使用INDEX中的CorrelationTicket。

CONSTRAINT [PK_Redeem] PRIMARY KEY CLUSTERED 
(
    [CreatedDate] DESC, 
    [Id] DESC 
) 
相关问题