বিজোড় স্ট্রিমের সামগ্রিক আচরণ


11

প্রশ্ন:

declare @X xml = '
<item ID = "0"/>
<item ID = "1"/>
<item/>
<item/>';

select I.X.value('@ID', 'int')
from @X.nodes('/item') as I(X);

ফলাফল:

-----------
0
1
NULL
NULL

হত্যা পরিকল্পনা:

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

উপরের শাখাটি এক্সএমএলকে চারটি সারিতে বিভক্ত করে এবং নীচের শাখাটি গুণকের জন্য মানটি নিয়ে আসে ID

আমাকে কী বিজোড় হিসাবে আঘাত করে তা হ'ল স্ট্রিম সমষ্টি অপারেটর থেকে ফিরে আসা সারিগুলির সংখ্যা। ফিল্টার থেকে আসা 2 টি সারি হ'ল এক্সএমএলে IDপ্রথম এবং দ্বিতীয় itemনোডের বৈশিষ্ট্য । স্ট্রিম সমষ্টি চারটি সারি দেয়, প্রতিটি ইনপুট সারির জন্য একটি করে, কার্যকরভাবে ইনার জোড়কে একটি বহিরাগত যোগদানের দিকে পরিণত করে।

এই কি স্ট্রিম সমষ্টি অন্যান্য পরিস্থিতিতেও ঘটে বা এক্সএমএল অনুসন্ধানগুলি করার সময় এটি কিছুটা অদ্ভুতভাবে চলছে?

আমি কোয়েরি পরিকল্পনার এক্সএমএল সংস্করণে কোনও ইঙ্গিত দেখতে পাচ্ছি না যে এই স্ট্রিম সমষ্টিটি আমি আগে যে সমস্ত স্ট্রিম সমষ্টিটি লক্ষ্য করেছি তার চেয়ে আলাদা আচরণ করা উচিত।

উত্তর:


13

সমষ্টিটি একটি স্কেলার সমষ্টি (দফা অনুসারে কোনও গ্রুপ নয়)। এসকিউএল সার্ভারে সর্বদা একটি সার তৈরি করতে সংজ্ঞায়িত হয়, এমনকি ইনপুটটি খালি থাকলেও।

একটি স্কেলার সমষ্টি জন্য, MAXকোনও সারি নয় NULL, COUNTকোনও সারি শূন্য নয়, উদাহরণস্বরূপ। অপ্টিমাইজার এ সম্পর্কে সমস্ত কিছু জানে এবং উপযুক্ত পরিস্থিতিতে একটি বাহ্যিক জোড়কে অভ্যন্তরীণ জোড়ায় রূপান্তর করতে পারে।

-- NULL for a scalar aggregate
SELECT MAX(V.v) FROM (VALUES(1)) AS V (v) WHERE V.v = 2;

-- No row for a vector aggregate
SELECT MAX(V.v) FROM (VALUES(1)) AS V (v) WHERE V.v = 2 GROUP BY ();

সমষ্টি সম্পর্কে আরও তথ্যের জন্য, স্কেলার এবং ভেক্টর সমষ্টিগুলির সাথে আমার নিবন্ধটি মজা দেখুন ।


10

এখানে মনে রাখার বিষয়টি হ'ল কার্যকর করার পরিকল্পনাগুলি ডেটা চুষে ফেলে।

সুতরাং নেস্টেড লুপ অপারেটর 4 বার স্ট্রিম সমষ্টিকে কল করে। স্ট্রিম এগ্রিগ্রেট ফিল্টারটিকেও 4 বার কল করে, তবে কেবল দুবারই একটি মান পায়।

সুতরাং স্ট্রিম সমষ্টি চারটি মান দেয়। দু'বার এটি একটি মান দেয় এবং দুবার নুল দেয়।

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