আমার দুটি টেবিল রয়েছে যাতে নামযুক্ত, টাইপযুক্ত এবং সূচিবদ্ধ কী কলামগুলি রয়েছে। এর মধ্যে একটিতে একটি অনন্য ক্লাস্টারযুক্ত সূচক রয়েছে, অন্যটির একটি অনন্য ।
পরীক্ষা সেটআপ
কিছু বাস্তবসম্মত পরিসংখ্যান সহ সেটআপ স্ক্রিপ্ট:
DROP TABLE IF EXISTS #left;
DROP TABLE IF EXISTS #right;
CREATE TABLE #left (
a char(4) NOT NULL,
b char(2) NOT NULL,
c varchar(13) NOT NULL,
d bit NOT NULL,
e char(4) NOT NULL,
f char(25) NULL,
g char(25) NOT NULL,
h char(25) NULL
--- and a few other columns
);
CREATE UNIQUE CLUSTERED INDEX IX ON #left (a, b, c, d, e, f, g, h)
UPDATE STATISTICS #left WITH ROWCOUNT=63800000, PAGECOUNT=186000;
CREATE TABLE #right (
a char(4) NOT NULL,
b char(2) NOT NULL,
c varchar(13) NOT NULL,
d bit NOT NULL,
e char(4) NOT NULL,
f char(25) NULL,
g char(25) NOT NULL,
h char(25) NULL
--- and a few other columns
);
CREATE CLUSTERED INDEX IX ON #right (a, b, c, d, e, f, g, h)
UPDATE STATISTICS #right WITH ROWCOUNT=55700000, PAGECOUNT=128000;
তিরস্কার
আমি যখন তাদের ক্লাস্টারিং কীগুলিতে এই দুটি টেবিলগুলিতে যোগদান করি তখন আমি এক-একাধিক MERGE যোগদানের আশা করি, এরকম:
SELECT *
FROM #left AS l
LEFT JOIN #right AS r ON
l.a=r.a AND
l.b=r.b AND
l.c=r.c AND
l.d=r.d AND
l.e=r.e AND
l.f=r.f AND
l.g=r.g AND
l.h=r.h
WHERE l.a='2018';
এটি আমি চাই ক্যোয়ারী পরিকল্পনা:
(সতর্কবাণীগুলি মনে রাখবেন না, তাদের জাল পরিসংখ্যানগুলির সাথে করতে হবে))
যাইহোক, আমি যোগদানের আশেপাশে কলামগুলির ক্রম পরিবর্তন করি তবে এটির মতো:
SELECT *
FROM #left AS l
LEFT JOIN #right AS r ON
l.c=r.c AND -- used to be third
l.a=r.a AND -- used to be first
l.b=r.b AND -- used to be second
l.d=r.d AND
l.e=r.e AND
l.f=r.f AND
l.g=r.g AND
l.h=r.h
WHERE l.a='2018';
... এটা ঘটেছে:
বাছাই করা অপারেটর যোগদানের ঘোষিত আদেশ অনুযায়ী স্ট্রিমগুলি অর্ডার করে বলে মনে হচ্ছে c, a, b, d, e, f, g, h
, যা আমার ক্যোয়ারী পরিকল্পনায় একটি ব্লকিং অপারেশন যুক্ত করে।
আমি যে বিষয়গুলি দেখেছি
- আমি কলামগুলি
NOT NULL
একই ফলাফলগুলিতে পরিবর্তন করার চেষ্টা করেছি । - মূল সারণীটি
ANSI_PADDING OFF
তৈরি করা হয়েছিল , তবে এটি তৈরি করাANSI_PADDING ON
এই পরিকল্পনাকে প্রভাবিত করে না। - এর
INNER JOIN
পরিবর্তে আমি চেষ্টা করেছিLEFT JOIN
, কোনও পরিবর্তন নেই। - আমি এটি একটি 2014 এসপি 2 এন্টারপ্রাইজে আবিষ্কার করেছি, একটি 2017 বিকাশকারী (বর্তমান সিইউ) -এ একটি প্রতিস্থাপন তৈরি করেছি।
- শীর্ষস্থানীয় সূচী কলামে WHERE ধারাটি অপসারণ করা ভাল পরিকল্পনা তৈরি করে, তবে এটি ধরণের ফলাফলগুলিকে প্রভাবিত করে .. :)
অবশেষে, আমরা প্রশ্ন পেতে
- এটা কি ইচ্ছাকৃত?
- আমি কি ক্যোয়ারী পরিবর্তন না করেই বাছাই করতে পারি (যা ভেন্ডার কোড, তাই আমি আসলেই বরং চাইতাম না ...)। আমি টেবিল এবং সূচকগুলি পরিবর্তন করতে পারি।