私は非常に単純なテーブルクエリを手に入れました。私はうんざりしている。私が選択トップから200の代わりに50に変更すると、はるかに速くなります。テーブルには約100万行があります。SQL Serverのパフォーマンスが期待していたものではない
私は上記のすべての列にインデックスを持っています。 ORDER BY
と一緒SELECT TOP x
を使用すると、すべて同じ結果を保証するために、一般的に推奨されている間
CREATE TABLE dbo.EmailDetails (
Id int IDENTITY(1, 1) NOT NULL,
AttendeesId int NOT NULL,
SponsorListContactId int NULL,
MessageUniqueId nvarchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
EmailSendStatus nvarchar(16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
EmailSendStartTime datetime NULL,
EmailSendFinishTime datetime NULL,
EmailSendLogMessage nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
Subject nvarchar(2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
BodyText nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
SentDateTime datetime NULL,
EmailFrom nvarchar(128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
EmailTo nvarchar(128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
EmailDetailsTopicId int NULL,
EmailDetailsGuid uniqueidentifier NULL,
EmailReadCount int NULL,
EmailReadDate datetime NULL,
EmailSendStatusChange datetime NULL,
EmailSendPriority int NULL,
TextTo varchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT EmailDetails_pk PRIMARY KEY CLUSTERED (Id)
WITH (
PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_AttendeesIds_idx ON dbo.EmailDetails
(AttendeesId)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_idx ON dbo.EmailDetails
(EmailDetailsGuid)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_idx2 ON dbo.EmailDetails
(EmailDetailsTopicId)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_idx3 ON dbo.EmailDetails
(SentDateTime)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_priority_status_idx4 ON dbo.EmailDetails
(EmailSendPriority, EmailSendStatus)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_SentStatus_idx ON dbo.EmailDetails
(EmailSendStatus)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_topicid_attendeeid ON dbo.EmailDetails
(EmailDetailsTopicId, AttendeesId)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX EmailDetails_topicid_sponsorcontactid_idx ON dbo.EmailDetails
(EmailDetailsTopicId, SponsorListContactId)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
具体的な質問がありますか? – B540Glenn
クエリプランは何ですか? EXPORT IT(.sqlplan)を実行してください。 – TomTom
200のほうが高速だったのは、たぶんメモリ内の行/インデックスでした。 50対200はまだソートしなければならない。 – Paparazzi