আমি এমএস এসকিউএল ব্যবহার করছি, এবং আমাকে বিভিন্ন মাপদণ্ডে একই টেবিলে বেশ কয়েকটি ক্যুরিয়ার চালাতে হবে। প্রথমে আমি প্রতিটি টিকিটটি মূল টেবিলের দিকে চালিত করেছি যদিও তারা সকলেই কিছু ফিল্টারিং ভাগ করে (যেমন তারিখ, স্থিতি)। এটি অনেক সময় নিয়েছে (প্রায় 2 মিনিট)।
ডেটা সারিগুলিতে সদৃশ রয়েছে এবং সমস্ত সূচি নন-ক্লাস্টার্ড। আমি আমার মানদণ্ডের জন্য 4 টি কলামে আগ্রহী এবং ফলাফলটি সমস্ত প্রশ্নের জন্য কেবল গণনা আউটপুট করে output
কলাম প্রয়োজন: TABLE
, FIELD
, AFTER
, DATE
, এবং প্রতিটি উপর একটি সূচক DATE
এবং TABLE
।
আমার প্রয়োজন কেবল ক্ষেত্রগুলি দিয়ে একটি টেম্প টেবিল তৈরি করার পরে, এটি 1:40 মিনিটে নেমে গেছে, যা এখনও খুব খারাপ।
CREATE TABLE #TEMP
(
TABLE VARCHAR(30) NULL,
FIELD VARCHAR(30) NULL,
AFTER VARCHAR(1000) NULL,
DATE DATETIME,
SORT_ID INT IDENTITY(1,1)
)
CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID)
INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE)
SELECT TABLE, FIELD, AFTER, DATE
FROM mytbl WITH (NOLOCK)
WHERE TABLE = 'OTB' AND
FIELD = 'STATUS'
এটি চালান -> (216598 সারি প্রভাবিত)
যেহেতু সমস্ত প্রশ্নগুলি তারিখের সীমাতে নির্ভর করে না, তাই আমি এটিকে ক্যোয়ারিতে অন্তর্ভুক্ত করি নি। সমস্যাটি হ'ল কেবল সন্নিবেশ করতে 1 মিনিটের বেশি সময় লাগছে । উপরের সন্নিবেশটি 1:19 মিনিট সময় নিয়েছিল
আমি বেশ কয়েকটি প্রশ্নের জন্য এই জাতীয় কিছু চালাতে চাই:
SELECT COUNT(*) AS COUNT
FROM #TEMP
WHERE AFTER = 'R' AND
DATE >= '2014-01-01' AND
DATE <= '2015-01-01'
এটি নির্বাচনের চেয়ে বেশি সন্নিবেশ নিয়ে একটি সমস্যা, তবে টেম্পটির মূল টেবিলের চেয়ে কম সারি রয়েছে যা বেশ কয়েকবার টেবিলের মধ্য দিয়ে যাওয়ার চেয়ে ভাল হতে পারে।
আমি কীভাবে এটি অপ্টিমাইজ করতে পারি?
সম্পাদনা
আমি সাজানো আইডি সরিয়েছি, আমি ভেবেছিলাম সমস্যাটি মূলত নির্বাচিত এবং সন্নিবেশ না দিয়েই ছিল। এটি একটি অনুমান ছিল।
কোনও অনন্য ক্ষেত্র বা সারি নেই বলে আমি কোনও সূচকে অনন্য তৈরি করতে পারি না।
আমি এসকিউএল সার্ভার 2012 ব্যবহার করছি।
সারণী তথ্য : এটি একটি গাদা এবং নিম্নলিখিত স্থানের ব্যবহার রয়েছে:
name rows reserved data index_size unused
mytbl 24869658 9204568 KB 3017952 KB 5816232 KB 370384 KB
SELECT COUNT(*) AS COUNT FROM original_table WHERE AFTER = 'R' AND DATE >= '2014-01-01' AND DATE < '2015-01-01'
আপনি কেন প্রতিটি (ক্যোয়ারী) আলাদাভাবে অনুকূলিত করার চেষ্টা করবেন না? আপনি কি টেবিলে সূচি যোগ করার অনুমতি দিচ্ছেন না?
TABLE
এবং FIELD
কলামগুলি সরিয়ে ফেলতে পারেন #temp
(সমস্ত সারি TABLE = 'OTB' AND FIELD = 'STATUS'
নির্দিষ্ট টেম্প টেবিলের পরে থাকতে পারে))
CREATE TABLE
বিবৃতি)। প্রশ্নটি স্পষ্ট না হওয়ায় ডাউন ভোট ছিল।