আমার দুটি টেবিল রয়েছে যাতে নামযুক্ত, টাইপযুক্ত এবং সূচিবদ্ধ কী কলামগুলি রয়েছে। এর মধ্যে একটিতে একটি অনন্য ক্লাস্টারযুক্ত সূচক রয়েছে, অন্যটির একটি অনন্য ।
পরীক্ষা সেটআপ
কিছু বাস্তবসম্মত পরিসংখ্যান সহ সেটআপ স্ক্রিপ্ট:
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 ধারাটি অপসারণ করা ভাল পরিকল্পনা তৈরি করে, তবে এটি ধরণের ফলাফলগুলিকে প্রভাবিত করে .. :)
অবশেষে, আমরা প্রশ্ন পেতে
- এটা কি ইচ্ছাকৃত?
- আমি কি ক্যোয়ারী পরিবর্তন না করেই বাছাই করতে পারি (যা ভেন্ডার কোড, তাই আমি আসলেই বরং চাইতাম না ...)। আমি টেবিল এবং সূচকগুলি পরিবর্তন করতে পারি।


