Tôi đang tìm kiếm một số trợ giúp xin vui lòng. Tôi có một truy vấn đang chạy trên một bảng khá lớn (2 triệu bản ghi).
Tôi đã cố gắng để làm cho các chỉ số hoạt động hiệu quả. Có một vài truy vấn khác đối với bảng này, nhưng đây là câu hỏi thường gặp nhất. Tôi thực sự đấu tranh để khiến nó thực thi trong vòng dưới 1 giây và thường thấy nó chạy trong 3 đến 5 giây bằng cách sử dụng profiler.
Nó có thể nhanh như có thể, nhưng tôi sẽ đánh giá cao một số đầu vào để xác nhận / từ chối điều đó.
Chỉ cần một lưu ý: Dev sẽ không thay đổi truy vấn hoặc lược đồ nào cả. Tối ưu hóa chỉ có thể được thực hiện trong cơ sở dữ liệu và không có thay đổi lược đồ.
Cái bàn:
CREATE TABLE [dbo].[Notifications](
[ntID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[NotificationID] [int] NOT NULL,
[NotificationType] [nvarchar](50) NOT NULL,
[UserName] [nvarchar](50) NULL,
[CreatedBy] [nvarchar](50) NULL,
[CreatedOn] [datetime] NULL,
[Status] [nvarchar](50) NOT NULL,
[Result] [nvarchar](50) NULL,
[Extension] [nvarchar](50) NULL,
[ShiftRate] [nvarchar](255) NULL,
[ResponseMinutes] [int] NULL,
[ResponseWindow] [datetime] NULL,
[caNotificationID] [int] NULL,
[AwardedBy] [nvarchar](50) NULL,
[AwardedOn] [datetime] NULL,
[CancelledBy] [nvarchar](50) NULL,
[CancelledOn] [datetime] NULL,
[CancelledReasonID] [int] NULL,
[CancelledReasonText] [nvarchar](255) NULL,
[AwardingDate] [datetime] NULL,
[ScheduledLaunchDate] [datetime] NULL,
[CustomMessage] [nvarchar](160) NULL,
[SystemName] [nvarchar](4000) NULL,
[AutoClose] [bit] NOT NULL,
CONSTRAINT [PK_ESP_Notifications_ntID] PRIMARY KEY CLUSTERED
(
[ntID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ESP_Notifications] ADD DEFAULT ((0)) FOR [AutoClose]
GO
Ảnh chụp nhanh dữ liệu bảng:
Truy vấn:
Update Notifications
set Status = 'Awarding' OUTPUT deleted.*
where ntID = (
select top(1) ntID
from Notifications
where NotificationType = 'Shift'
and (Status = 'Done')
and ResponseWindow < '2019-02-04 10:40:03'
order by ntID)
Chỉ mục đã thử:
CREATE INDEX [IX_Notifications_Status_NotificationType_ResponseWindow_ntID]
ON [dbo].[Notifications](
[Status] ASC,[NotificationType] ASC,[ResponseWindow] DESC,[ntID] DESC
)
CREATE INDEX [IX_Notifications_Status_ScheduledLaunchDate_ntID]
ON [dbo].[Notifications](
[ScheduledLaunchDate] DESC,[Status] ASC,[ntID] ASC
)
CREATE INDEX [IX_Notifications_NotificationType_caNotificationID_NotificationID_ntID]
ON [dbo].[Notifications](
[NotificationType] DESC, [caNotificationID] DESC, [NotificationID] DESC, [ntID] DESC
);
NotificationType chứa 3 loại khác nhau, trong đó 70% là loại 'Shift' Trạng thái có 10 loại, nhưng các bản ghi 'Trong chuyến bay' chỉ khoảng 100 đến 200, được chia thành 4 Trạng thái
Cám ơn sự giúp đỡ của bạn.