আমি নীচের মত একটি কোয়েরি পেয়েছি:
DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN (
SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL
)
tblFEStats ব্রাউজারগুলি 553 সারি পেয়েছে।
tblFEStatsPaperHits 47,974.301 সারি পেয়েছে।
tblFEStatsBrowsers:
CREATE TABLE [dbo].[tblFEStatsBrowsers](
[BrowserID] [smallint] IDENTITY(1,1) NOT NULL,
[Browser] [varchar](50) NOT NULL,
[Name] [varchar](40) NOT NULL,
[Version] [varchar](10) NOT NULL,
CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED ([BrowserID] ASC)
)
tblFEStatsPaperHits:
CREATE TABLE [dbo].[tblFEStatsPaperHits](
[PaperID] [int] NOT NULL,
[Created] [smalldatetime] NOT NULL,
[IP] [binary](4) NULL,
[PlatformID] [tinyint] NULL,
[BrowserID] [smallint] NULL,
[ReferrerID] [int] NULL,
[UserLanguage] [char](2) NULL
)
TblFEStatsPaperHits- তে একটি ক্লাস্টার ইনডেক্স রয়েছে যা ব্রাউজারআইডি অন্তর্ভুক্ত করে না। অভ্যন্তরীণ কোয়েরি সম্পাদন করার জন্য tblFEStatsPaperHits- এর সম্পূর্ণ টেবিল স্ক্যানের প্রয়োজন হবে - যা সম্পূর্ণ ঠিক।
বর্তমানে, টিবিএলএফইএসটিস ব্রাউজারগুলিতে প্রতিটি সারির জন্য একটি সম্পূর্ণ স্ক্যান কার্যকর করা হয়, যার অর্থ আমি 553 টিবিএলএফএটিএসটিস পেপারহিটগুলির পুরো টেবিল স্ক্যান পেয়েছি।
কেবলমাত্র যেখানে উপস্থিত রয়েছে সেখানে পুনর্লিখন পরিকল্পনাটি পরিবর্তন করে না:
DELETE FROM tblFEStatsBrowsers WHERE NOT EXISTS (
SELECT * FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID = tblFEStatsBrowsers.BrowserID
)
যাইহোক, অ্যাডাম মাচানিকের পরামর্শ অনুসারে, একটি হ্যাশ জয়িন বিকল্প যুক্ত করার ফলে সর্বোত্তম বাস্তবায়ন পরিকল্পনার ফলস্বরূপ (কেবলমাত্র একক স্ক্যান tblFEStatsPaperHits):
DELETE FROM tblFEStatsBrowsers WHERE NOT EXISTS (
SELECT * FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID = tblFEStatsBrowsers.BrowserID
) OPTION (HASH JOIN)
এখন এটি কীভাবে এটি ঠিক করতে হবে তা নিয়ে তেমন প্রশ্নই আসে না - আমি হয় অপশন (হ্যাশ যোগ) ব্যবহার করতে পারি বা ম্যানুয়ালি একটি টেম্প টেবিল তৈরি করতে পারি। আমি আরও ভাবছি কেন ক্যোয়ারী অপ্টিমাইজার বর্তমানে এটির পরিকল্পনাটি কেন ব্যবহার করবে।
ব্রাউজারআইডি কলামে কিউওর কোনও পরিসংখ্যান নেই বলে আমি অনুমান করছি যে এটি সবচেয়ে খারাপ - ৫০ মিলিয়ন স্বতন্ত্র মান হিসাবে ধরে নিচ্ছে, এইভাবে মেমরি / টেম্পডিবি ওয়ার্কটেবলের জন্য বেশ বড় প্রয়োজন। এর মতো, সবচেয়ে নিরাপদতম উপায় হল টিবিএলএফইএসটিএসব্রাউজারগুলিতে প্রতিটি সারির জন্য স্ক্যান করা। দুটি টেবিলের মধ্যে ব্রাউজারআইডি কলামগুলির মধ্যে কোনও বিদেশী কী সম্পর্ক নেই, তাই কিউও টিবিএলএফইএসটিস ব্রাউজারগুলি থেকে কোনও তথ্য বাদ দিতে পারে না।
এটি, এটি যতটা সহজ শোনায়, কারণ?
আপডেট 1 টি
কয়েকটি স্ট্যাটাস দেওয়ার জন্য: বিকল্প (হ্যাশ যোগ):
208.711 লজিকাল রিডস (12 স্ক্যান)
বিকল্প (লুপ
জয়েন , হ্যাশ গ্রুপ): 11.008.698 লজিকাল রিড (Brow ব্রাউজারআইডি স্ক্যান (339))
কোনও বিকল্প নেই:
11.008.775 লজিকাল রিডস (Brow ব্রাউজারআইডি স্ক্যান (339))
আপডেট 2 দুর্দান্ত
উত্তর, আপনারা সবাই - ধন্যবাদ! মাত্র একটি বাছাই করা শক্ত। যদিও মার্টিন প্রথম ছিল এবং রেমাস একটি দুর্দান্ত সমাধান সরবরাহ করেছে, বিশদটি সম্পর্কে মানসিকতার জন্য আমাকে কিউইকে দিতে হবে :)