テーブルには 100K を超えるレコードがあり、適切なインデックスが既に存在します。これは、ほぼ 1.2 秒かかり、現時点では受け入れられない私のストアド プロシージャです。
ALTER PROCEDURE [dbo].[GetNextAndPreviousInsturmentID]
(
@AccountID int,
@JurisdictionID int,
@InstrumentID varchar(14),
@PreviousInstrumentID varchar(14) OUT,
@NextInstrumentID varchar(14) OUT,
@PreviousDocumentID int OUT,
@NextDocumentID int OUT,
@ShowPublicPageForPreviousInstrumentID bit OUT,
@ShowPublicPageForNextInstrumentID bit OUT
)
AS
BEGIN
Declare @RowNum int = 0
Declare @PreviousCreatedByAccountID int = 0
Declare @PreviousBelongsToJurisdictionID int = 0
Declare @NextCreatedByAccountID int = 0
Declare @NextBelongsToJurisdictionID int = 0
Select @RowNum = RowNum
From
(
Select ROW_NUMBER() Over (Order by RecordingDateTime) as RowNum, InstrumentID
From Documents Where RecordingDateTime IS NOT NULL
) v where v.InstrumentID = @InstrumentID
;With normal As
(
Select ROW_NUMBER() Over (Order by RecordingDateTime) as RowNum,
DocumentID,
CreatedByAccountID,
JurisdictionID,
InstrumentID
From Documents Where RecordingDateTime IS NOT NULL
)
SELECT
@PreviousInstrumentID = MAX(CASE RowNum WHEN @RowNum - 1 THEN InstrumentID END),
@PreviousDocumentID = MAX(CASE RowNum WHEN @RowNum - 1 THEN DocumentID END),
@PreviousCreatedByAccountID = MAX(CASE RowNum WHEN @RowNum - 1 THEN CreatedByAccountID END),
@PreviousBelongsToJurisdictionID = MAX(CASE RowNum WHEN @RowNum - 1 THEN JurisdictionID END),
@NextInstrumentID = MAX(CASE RowNum WHEN @RowNum + 1 THEN InstrumentID END),
@NextDocumentID = MAX(CASE RowNum WHEN @RowNum + 1 THEN DocumentID END),
@NextCreatedByAccountID = MAX(CASE RowNum WHEN @RowNum + 1 THEN CreatedByAccountID END),
@NextBelongsToJurisdictionID = MAX(CASE RowNum WHEN @RowNum + 1 THEN JurisdictionID END)
FROM normal
WHERE RowNum IN (@RowNum - 1, @RowNum + 1)
if @JurisdictionID > 0
Begin
If @NextBelongsToJurisdictionID = @JurisdictionID
Begin
Set @ShowPublicPageForNextInstrumentID = 0
End
Else
Begin
Set @ShowPublicPageForNextInstrumentID = 1
End
If @PreviousBelongsToJurisdictionID = @JurisdictionID
Begin
Set @ShowPublicPageForPreviousInstrumentID = 0
End
Else
Begin
Set @ShowPublicPageForPreviousInstrumentID = 1
End
End
Else If @AccountID > 0
Begin
If @NextCreatedByAccountID = @AccountID
Begin
Set @ShowPublicPageForNextInstrumentID = 0
End
Else
Begin
Set @ShowPublicPageForNextInstrumentID = 1
End
If @PreviousCreatedByAccountID = @AccountID
Begin
Set @ShowPublicPageForPreviousInstrumentID = 0
End
Else
Begin
Set @ShowPublicPageForPreviousInstrumentID = 1
End
End
Else
Begin
Set @ShowPublicPageForNextInstrumentID = 1
Set @ShowPublicPageForPreviousInstrumentID = 1
End
Set @PreviousInstrumentID = IsNull(@PreviousInstrumentID,'')
Set @NextInstrumentID = IsNull(@NextInstrumentID,'')
Set @PreviousDocumentID = IsNull(@PreviousDocumentID,0)
Set @NextDocumentID = IsNull(@NextDocumentID,0)
Set @ShowPublicPageForPreviousInstrumentID = ISNULL(@ShowPublicPageForPreviousInstrumentID,0)
Set @ShowPublicPageForNextInstrumentID = IsNull(@ShowPublicPageForNextInstrumentID,0)
END
これは私のテーブル定義とインデックスです:
CREATE TABLE [dbo].[Documents](
[DocumentID] [int] IDENTITY(1000001,1) NOT NULL,
[IGroupID] [int] NOT NULL,
[ITypeID] [int] NOT NULL,
[IDate] [smalldatetime] NOT NULL,
[JudgementTypeID] [smallint] NULL,
[JurisdictionID] [int] NOT NULL,
[DocumentDate] [smalldatetime] NULL,
[Remarks] [varchar](256) NULL,
[UserID] [int] NOT NULL,
[CreatedByAccountID] [int] NULL,
[CreatedByJurisdictionID] [int] NULL,
[InternalNotes] [varchar](250) NULL,
[ParentDocumentID] [int] NULL,
[DocumentStatusID] [tinyint] NULL,
[FilingNumber] [int] NULL,
[EfileDate] [datetime] NULL,
[EfiledByUserID] [int] NULL,
[ACEfileCreditCardID] [int] NULL,
[ACEfileBankAccountID] [int] NULL,
[StampData] [varchar](1024) NULL,
[InstrumentID] [varchar](14) NULL,
[ApprovedBy] [int] NULL,
[RecordingDateTime] [datetime] NULL,
[Receipt] [varchar](8000) NULL,
[ReceiptNo] [varchar](50) NULL,
[IsReEfiled] [bit] NOT NULL,
[OldInstrumentID] [varchar](14) NULL,
[LastStatusChangedDateTime] [datetime] NULL,
[ImportedFromInstrumentID] [varchar](14) NULL,
[IsChanged] [bit] NOT NULL,
[IsUpdatedAfterChanged] [bit] NOT NULL,
CONSTRAINT [PK_Documents] PRIMARY KEY CLUSTERED
(
[DocumentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY],
CONSTRAINT [UQ_Documents] UNIQUE NONCLUSTERED
(
[DocumentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_ACEfileBankAccountID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ACEfileBankAccountID] ON [dbo].[Documents]
(
[ACEfileBankAccountID] ASC
)
INCLUDE ( [ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_ACEfileCreditCardID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ACEfileCreditCardID] ON [dbo].[Documents]
(
[ACEfileCreditCardID] ASC
)
INCLUDE ( [ACEfileBankAccountID],
[ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_ApprovedBy] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ApprovedBy] ON [dbo].[Documents]
(
[ApprovedBy] ASC
)
INCLUDE ( [JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_CreatedByAccountID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_CreatedByAccountID] ON [dbo].[Documents]
(
[CreatedByAccountID] ASC
)
INCLUDE ( [InstrumentID],
[DocumentStatusID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_CreatedByJurisdictionID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_CreatedByJurisdictionID] ON [dbo].[Documents]
(
[CreatedByJurisdictionID] ASC
)
INCLUDE ( [CreatedByAccountID],
[InstrumentID],
[DocumentStatusID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_DocumentDate] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_DocumentDate] ON [dbo].[Documents]
(
[DocumentDate] ASC
)
INCLUDE ( [ACEfileCreditCardID],
[ACEfileBankAccountID],
[ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_DocumentStatusID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_DocumentStatusID] ON [dbo].[Documents]
(
[DocumentStatusID] ASC
)
INCLUDE ( [DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[InstrumentID],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_EfileDate] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_EfileDate] ON [dbo].[Documents]
(
[EfileDate] ASC
)
INCLUDE ( [UserID],
[RecordingDateTime],
[ApprovedBy],
[ACEfileBankAccountID],
[LastStatusChangedDateTime],
[ACEfileCreditCardID],
[EfiledByUserID],
[ITypeID],
[IGroupID],
[InstrumentID],
[OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[StampData],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_EfiledByUserID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_EfiledByUserID] ON [dbo].[Documents]
(
[EfiledByUserID] ASC
)
INCLUDE ( [ITypeID],
[IGroupID],
[InstrumentID],
[OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
/****** Object: Index [IX_FilingNumber] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_FilingNumber] ON [dbo].[Documents]
(
[FilingNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_IDate] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_IDate] ON [dbo].[Documents]
(
[IDate] ASC
)
INCLUDE ( [EfileDate],
[UserID],
[RecordingDateTime],
[ApprovedBy],
[ACEfileBankAccountID],
[LastStatusChangedDateTime],
[ACEfileCreditCardID],
[EfiledByUserID],
[ITypeID],
[IGroupID],
[InstrumentID],
[OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[StampData],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_IGroupID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_IGroupID] ON [dbo].[Documents]
(
[IGroupID] ASC
)
INCLUDE ( [UserID],
[DocumentDate],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[ITypeID],
[IDate],
[JudgementTypeID],
[Remarks],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_ImportedFromInstrumentID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ImportedFromInstrumentID] ON [dbo].[Documents]
(
[ImportedFromInstrumentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_InstrumentID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_InstrumentID] ON [dbo].[Documents]
(
[InstrumentID] ASC
)
INCLUDE ( [OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_ITypeID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ITypeID] ON [dbo].[Documents]
(
[ITypeID] ASC
)
INCLUDE ( [IGroupID],
[UserID],
[DocumentDate],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IDate],
[JudgementTypeID],
[Remarks],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_JurisdictionID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_JurisdictionID] ON [dbo].[Documents]
(
[JurisdictionID] ASC
)
INCLUDE ( [DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[DocumentDate],
[Remarks],
[UserID],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[InstrumentID],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_LastStatusChangedDateTime] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_LastStatusChangedDateTime] ON [dbo].[Documents]
(
[LastStatusChangedDateTime] ASC
)
INCLUDE ( [ACEfileBankAccountID],
[ACEfileCreditCardID],
[EfiledByUserID],
[ITypeID],
[IGroupID],
[InstrumentID],
[OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_OldInstrumentID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_OldInstrumentID] ON [dbo].[Documents]
(
[OldInstrumentID] ASC
)
INCLUDE ( [CreatedByJurisdictionID],
[CreatedByAccountID],
[InstrumentID],
[DocumentStatusID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[StampData],
[ApprovedBy],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
/****** Object: Index [IX_ParentDocumentID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_ParentDocumentID] ON [dbo].[Documents]
(
[ParentDocumentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_RecordingDateTime] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_RecordingDateTime] ON [dbo].[Documents]
(
[RecordingDateTime] ASC
)
INCLUDE ( [ApprovedBy],
[ACEfileBankAccountID],
[LastStatusChangedDateTime],
[ACEfileCreditCardID],
[EfiledByUserID],
[ITypeID],
[IGroupID],
[InstrumentID],
[OldInstrumentID],
[CreatedByJurisdictionID],
[CreatedByAccountID],
[DocumentStatusID],
[IDate],
[JudgementTypeID],
[JurisdictionID],
[DocumentDate],
[Remarks],
[UserID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[StampData],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object: Index [IX_UserID] Script Date: 3/13/2013 5:17:53 AM ******/
CREATE NONCLUSTERED INDEX [IX_UserID] ON [dbo].[Documents]
(
[UserID] ASC
)
INCLUDE ( [DocumentDate],
[ACEfileCreditCardID],
[ACEfileBankAccountID],
[ApprovedBy],
[JurisdictionID],
[DocumentStatusID],
[DocumentID],
[IGroupID],
[ITypeID],
[IDate],
[JudgementTypeID],
[Remarks],
[CreatedByAccountID],
[CreatedByJurisdictionID],
[InternalNotes],
[ParentDocumentID],
[FilingNumber],
[EfileDate],
[EfiledByUserID],
[StampData],
[InstrumentID],
[RecordingDateTime],
[Receipt],
[ReceiptNo],
[IsReEfiled],
[OldInstrumentID],
[LastStatusChangedDateTime],
[ImportedFromInstrumentID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
このクエリを高速化する方法はありますか? 基本的に、次と前を取得しようとしています。したがって、楽器 ID を渡すと、その前後のレコードを見つけようとします。
これは私のラグ/リード クエリです (新しい機能 - パフォーマンスの低下 :()
;With normal As
(
Select Top 100 Percent
InstrumentID,
Lead(d.InstrumentID) Over (Order By RecordingDateTime) as LeadInstrumentID,
Lag(d.InstrumentID) Over (Order By RecordingDateTime) as LagInstrumentID,
DocumentID,
Lead(d.DocumentID) Over (Order By RecordingDateTime) as LeadDocumentID,
Lag(d.DocumentID) Over (Order By RecordingDateTime) as LagDocumentID,
CreatedByAccountID,
Lead(d.CreatedByAccountID) Over (Order By RecordingDateTime) as LeadCreatedByAccountID,
Lag(d.CreatedByAccountID) Over (Order By RecordingDateTime) as LagCreatedByAccountID,
JurisdictionID,
Lead(d.JurisdictionID) Over (Order By RecordingDateTime) as LeadJurisdictionID,
Lag(d.JurisdictionID) Over (Order By RecordingDateTime) as LagJurisdictionID
From Documents d Where RecordingDateTime IS NOT NULL
Order by RecordingDateTime
)
SELECT
@PreviousInstrumentID = LagInstrumentID,
@PreviousDocumentID = LagDocumentID,
@PreviousCreatedByAccountID = LagCreatedByAccountID,
@PreviousBelongsToJurisdictionID = LagJurisdictionID,
@NextInstrumentID = LeadInstrumentID,
@NextDocumentID = LeadDocumentID,
@NextCreatedByAccountID = LeadCreatedByAccountID,
@NextBelongsToJurisdictionID = LeadJurisdictionID
FROM normal n
Where n.InstrumentID = @InstrumentID
現在、InstrumentID には既にインデックスがありますが、このクエリは、SSMS で 2 秒かかっていた以前のクエリよりも悪いものです。
これは私が最終的に持っているものです-3つの別々のクエリ:
Declare @RecordingDateTime datetime
Select @RecordingDateTime = RecordingDateTime
From Documents d Where d.InstrumentID = @InstrumentID
Select Top 1 @PreviousInstrumentID = InstrumentID ,
@PreviousDocumentID = DocumentID ,
@PreviousCreatedByAccountID = CreatedByAccountID,
@PreviousBelongsToJurisdictionID = JurisdictionID
From Documents d
Where d.RecordingDateTime < @RecordingDateTime
Order By d.RecordingDateTime Desc
Select Top 1 @NextInstrumentID = InstrumentID ,
@NextDocumentID = DocumentID ,
@NextCreatedByAccountID = CreatedByAccountID,
@NextBelongsToJurisdictionID = JurisdictionID
From Documents d
Where d.RecordingDateTime > @RecordingDateTime
Order By d.RecordingDateTime
このクエリの期間は25
、SQL プロファイラーに記載されているとおりです。