এক্সসিপিটি অপারেটরের পিছনে অ্যালগরিদম কী?


10

এসকিউএল সার্ভারের কভারগুলির আওতা ব্যতীত অপারেটর কীভাবে কাজ করে তার অভ্যন্তরীণ অ্যালগরিদম কী ? এটি অভ্যন্তরীণভাবে প্রতিটি সারির একটি হ্যাশ নেয় এবং তুলনা করে?

ডেভিড লোজিংসি একটি গবেষণা চালিয়েছেন, এসকিউএল: নতুন রেকর্ডগুলি সন্নিবেশ করার দ্রুততম উপায় যেখানে কোনওটি ইতিমধ্যে বিদ্যমান নেই তিনি দেখিয়েছেন ব্যতীত বৃহত সংখ্যক সারিগুলির পক্ষে দ্রুততম বিবরণ; নীচে আমাদের ফলাফল নিবিড়ভাবে বেঁধে রাখা।

অনুমান: আমি মনে করি বাম যোগদানটি সবচেয়ে দ্রুত হবে, কারণ এটি কেবলমাত্র 1 টি কলামের তুলনা করে, তবে এটি সমস্ত কলামগুলির তুলনা করার কারণে সবচেয়ে দীর্ঘ সময় নেয়।
এই ফলাফলগুলির সাথে, এখন আমাদের চিন্তাভাবনা স্বয়ংক্রিয়ভাবে ব্যতীত এবং অভ্যন্তরীণভাবে প্রতিটি সারির একটি হ্যাশ লাগে? আমি কার্যনির্বাহী পরিকল্পনা ব্যতীত দেখেছি এবং এটি কিছু হ্যাশ ব্যবহার করে।

পটভূমি: আমাদের দল দুটি হিপ টেবিলের তুলনা করছিল। সারণি A সারিগুলি সারণি বিতে নেই, সারণি বিতে সন্নিবেশ করা হয়েছিল

হ্যাপ টেবিলগুলিতে (লিগ্যাসি টেক্সট ফাইল সিস্টেম থেকে) প্রাথমিক কী / গাইড / সনাক্তকারী নেই। কিছু টেবিলের সদৃশ সারি ছিল, সুতরাং আমরা প্রতিটি সারির হ্যাশ পেয়েছি এবং নকলগুলি সরিয়েছি এবং প্রাথমিক কী সনাক্তকারী তৈরি করেছি।

1) প্রথমে আমরা (হ্যাশ কলাম) বাদ দিয়ে বিবৃতি ব্যতীত চালিয়েছিলাম

select * from TableA
Except
Select * from TableB,

2) তারপরে আমরা হ্যাশরওআইডিতে দুটি টেবিলের মধ্যে তুলনা করে একটি বাম জোড়ায় ছুটে এসেছি

select * 
FROM dbo.TableA A
left join dbo.TableB B
    on A.RowHash =  B.RowHash
where B.Hash is null

আশ্চর্যজনকভাবে ব্যতীত বিবৃতি সন্নিবেশটি দ্রুততম ছিল।

ডেভিড লোজিংসির ফলাফল পরীক্ষার ফলাফলের নিকটে প্রকৃত মানচিত্র

এখানে চিত্র বর্ণনা লিখুন


উত্তর:


10

এসকিউএল সার্ভারের কভারগুলির আওতা ব্যতীত অপারেটর কীভাবে কাজ করে তার অভ্যন্তরীণ অ্যালগরিদম কী?

আমি এটি বলব না যে এর জন্য একটি বিশেষ অভ্যন্তরীণ অ্যালগরিদম রয়েছে EXCEPT। কারণ A EXCEPT Bইঞ্জিনটি এ থেকে আলাদা (যদি প্রয়োজন হয়) টিপল নেয় এবং বি তে মেলে এমন সারিগুলি বিয়োগ করে There কোনও বিশেষ ক্যোয়ারী পরিকল্পনা অপারেটর নেই। স্বতন্ত্র এবং বিয়োগফলগুলি সাধারণ অপারেটরগুলির মাধ্যমে প্রয়োগ করা হয় যা আপনি কোনও সাজানোর মাধ্যমে বা যোগদানের মাধ্যমে দেখতে পাবেন। নেস্টেড লুপ জোড়, মার্জ জয় এবং হ্যাশ জয়েন সমস্ত সমর্থিত। এটি দেখানোর জন্য, আমি 15 মিলিয়ন সারি একটি জোড়ের মধ্যে ফেলে দেব:

DROP TABLE IF EXISTS dbo.TABLE_1;

CREATE TABLE dbo.TABLE_1 (
    COL1 BIGINT NULL,
    COL2 BIGINT NULL
);

INSERT INTO dbo.TABLE_1 WITH (TABLOCK)
SELECT TOP (15000000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), NULL
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);


DROP TABLE IF EXISTS dbo.TABLE_2;

CREATE TABLE dbo.TABLE_2 (
    COL1 BIGINT NULL,
    COL2 BIGINT NULL
);

INSERT INTO dbo.TABLE_2 WITH (TABLOCK)
SELECT TOP (15000000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), NULL
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);

অপ্টিমাইজারটি কীভাবে বাছাই করতে এবং যোগদান করতে হবে সে সম্পর্কে এটি ব্যয়ভিত্তিক সিদ্ধান্ত নেয়। দুটি গাদা দিয়ে আমি প্রত্যাশা অনুযায়ী একটি হ্যাশ যোগদান করি। আপনি সূচকগুলি যোগ করে বা উভয় টেবিলে ডেটা পরিবর্তন করে প্রাকৃতিকভাবে অন্যান্য যোগদানের প্রকার দেখতে পাচ্ছেন। নীচে আমি একীভূত করতে বাধ্য করি এবং লুপগুলি কেবল চিত্রণমূলক উদ্দেশ্যে ইঙ্গিতগুলির সাথে যোগ দেয়:

যোগদান করে

এটি অভ্যন্তরীণভাবে প্রতিটি সারির একটি হ্যাশ নেয় এবং তুলনা করে?

না। এটি অন্য কোনও যোগদান হিসাবে বাস্তবায়ন করা হয়। একটি পার্থক্য হ'ল NULL গুলি সমান হিসাবে বিবেচিত হয়। এই তুলনা একটি বিশেষ ধরনের যা আপনি সঞ্চালনের পরিকল্পনা দেখতে পাবেন হল: <Compare CompareOp="IS">। তবে, আপনি টি-এসকিউএল এর সাথে একই পরিকল্পনাটি পেতে পারেন যা EXCEPTকীওয়ার্ডটি অন্তর্ভুক্ত করে না । উদাহরণস্বরূপ, নীচে EXCEPTহ্যাশ জয়েন ব্যবহার করে এমন ক্যোয়ারির মতো সঠিক ক্যোয়ারী পরিকল্পনা রয়েছে :

SELECT t1.*
FROM
(
    SELECT DISTINCT COL1, COL2
    FROM dbo.TABLE_1
) t1
WHERE NOT EXISTS (
    SELECT 1
    FROM dbo.TABLE_2 t2
    WHERE (t1.COL1 = t2.COL1 OR (t1.COL1 IS NULL AND t2.COL1 IS NULL))
    AND (t1.COL2 = t2.COL2 OR (t1.COL2 IS NULL AND t2.COL2 IS NULL))
);

এক্সিকিউশন পরিকল্পনার এক্সএমএলকে পৃথক করা কেবলমাত্র এলিয়াস এবং এর মতো জিনিসের চারপাশে মাত্রাতিরিক্ত পার্থক্য প্রকাশ করে। হ্যাশের অনুসন্ধানের অবশিষ্টাংশগুলি সারির তুলনা করে। উভয় প্রশ্নের জন্য এগুলি একই:

এখানে চিত্র বর্ণনা লিখুন

যদি আপনার এখনও সন্দেহ থাকে তবে আমি কোয়েরির সাথে কল স্ট্যাক EXCEPTএবং এটি ছাড়াই সর্বাধিক উপলব্ধ নমুনা হারের সাথে পারফিউউ দৌড়েছি । এখানে পাশাপাশি রয়েছে ফলাফলগুলি:

এখানে চিত্র বর্ণনা লিখুন

কোন বাস্তব পার্থক্য আছে। পরিকল্পনায় হ্যাশ ম্যাচ হওয়ার কারণে সেখানে কল স্ট্যাকগুলি রেফারেন্স হ্যাশিং উপস্থিত রয়েছে। যদি আমি প্রাকৃতিক মার্জ যোগ দিতে সূচকগুলি যুক্ত করি তবে আপনি কল স্ট্যাকগুলিতে হ্যাশিংয়ের কোনও উল্লেখ দেখতে পাবেন না:

এখানে চিত্র বর্ণনা লিখুন

যে কোনও হ্যাশিং ঘটে তা হ্যাশ ম্যাচ অপারেটরগুলির বাস্তবায়নের কারণে। এখানে বিশেষ কিছু নেই EXCEPTযা একটি বিশেষ, অভ্যন্তরীণ হ্যাশিং তুলনার দিকে নিয়ে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.