আমার একটি ক্যোয়ারী রয়েছে যা বর্তমানে সম্পূর্ণ করতে গড়ে 2500 মিমি নিচ্ছে। আমার টেবিলটি খুব সংকীর্ণ, তবে এখানে ৪৪ মিলিয়ন সারি রয়েছে। পারফরম্যান্স উন্নত করার জন্য আমার কাছে কী বিকল্প রয়েছে, বা এটি যতটা তা পায় ততই ভাল?
প্রশ্ন
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]
অতিরিক্ত সূচিপত্র যুক্ত করতে সাহায্য করবে? যদি তা হয় তবে তাদের দেখতে কেমন হবে? বর্তমান পারফরম্যান্সটি গ্রহণযোগ্য, কারণ কোয়েরিটি কেবল মাঝে মধ্যেই চালিত হয় তবে আমি শিখার অনুশীলন হিসাবে ভাবছি, এটি দ্রুত করার জন্য আমি কি কিছু করতে পারি?
হালনাগাদ
যখন আমি একটি বলের সূচক ইঙ্গিতটি ব্যবহার করতে কোয়েরিটি পরিবর্তন করি, তখন কোয়েরি 50 মিমিতে সম্পাদিত হয়:
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WITH(INDEX(CommonQueryIndex))
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'
একটি সঠিকভাবে নির্বাচনী ডিভাইসআইডিএস ধারাটি যোগ করা 50 মিমি ব্যাপ্তিতেও আঘাত করে:
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]
মূল ক্যোয়ারিতে যুক্ত করি তবে আমি 50 মিমির মধ্যে থাকি:
SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats]
WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'
ORDER BY [DateEntered], [DeviceID];
এই সমস্তগুলি সূচকটি আমি ব্যবহার করছিলাম (কমনকিউয়ারআইডেক্স) তাই, আমি মনে করি আমার প্রশ্নটি এখন, এই সূচকটি এই জাতীয় প্রশ্নের জন্য ব্যবহার করতে বাধ্য করার কোনও উপায় আছে কি? বা আমার টেবিলের আকারটি অপটিমাইজারটি খুব বেশি ছুঁড়ে ফেলেছে এবং আমাকে অবশ্যই একটি ORDER BY
বা একটি ইঙ্গিত ব্যবহার করতে হবে ?