ฉันมีข้อความค้นหาที่ใช้เวลาโดยเฉลี่ย 2,500 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์ ตารางของฉันแคบมาก แต่มี 44 ล้านแถว ฉันมีตัวเลือกอะไรบ้างในการปรับปรุงประสิทธิภาพหรือตัวเลือกนี้ดีเท่าที่ได้รับ
คำค้นหา
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats]
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31';
โต๊ะ
CREATE TABLE [dbo].[Heartbeats](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DeviceID] [int] NOT NULL,
[IsPUp] [bit] NOT NULL,
[IsWebUp] [bit] NOT NULL,
[IsPingUp] [bit] NOT NULL,
[DateEntered] [datetime] NOT NULL,
CONSTRAINT [PK_Heartbeats] 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]
ดัชนี
CREATE NONCLUSTERED INDEX [CommonQueryIndex] ON [dbo].[Heartbeats]
(
[DateEntered] ASC,
[DeviceID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
การเพิ่มดัชนีเพิ่มเติมช่วยหรือไม่ ถ้าเป็นเช่นนั้นพวกเขาจะมีลักษณะอย่างไร ประสิทธิภาพปัจจุบันเป็นที่ยอมรับเนื่องจากแบบสอบถามใช้บางครั้งเท่านั้น แต่ฉันสงสัยว่าเป็นแบบฝึกหัดการเรียนรู้มีอะไรที่ฉันสามารถทำได้เพื่อให้เร็วขึ้นหรือไม่
UPDATE
เมื่อฉันเปลี่ยนแบบสอบถามเพื่อใช้คำใบ้ดัชนีบังคับแบบสอบถามดำเนินการใน 50ms:
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WITH(INDEX(CommonQueryIndex))
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'
การเพิ่ม DeviceID clause ที่เลือกอย่างถูกต้องยังส่งผลถึงช่วง 50ms:
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats]
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' AND DeviceID = 4;
ถ้าฉันเพิ่มลงORDER BY [DateEntered], [DeviceID]
ในคิวรีดั้งเดิมฉันอยู่ในช่วง 50ms:
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats]
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'
ORDER BY [DateEntered], [DeviceID];
สิ่งเหล่านี้ใช้ดัชนีที่ฉันคาดหวัง (CommonQueryIndex) ดังนั้นฉันคิดว่าคำถามของฉันคือตอนนี้มีวิธีบังคับดัชนีนี้ให้ใช้กับแบบสอบถามแบบนี้หรือไม่? หรือขนาดของตารางของฉันลดลงจากเครื่องมือเพิ่มประสิทธิภาพมากเกินไปและฉันต้องใช้ORDER BY
หรือคำใบ้?