আমি 20M সারি সঙ্গে একটি টেবিল আছে, এবং প্রতিটি সারির 3 কলাম রয়েছে: time
, id
, এবং value
। প্রত্যেকের জন্য id
এবং time
, একটি হল value
অবস্থা। আমি একটি নির্দিষ্ট time
জন্য একটি নির্দিষ্ট সীসা এবং পিছনে মান জানতে চাই id
।
আমি এটি অর্জনে দুটি পদ্ধতি ব্যবহার করেছি। একটি পদ্ধতি যোগদানের ব্যবহার করছে ও অন্য পদ্ধতি জানালা ফাংশন নেতৃত্ব ব্যবহার করছে / উপর ক্লাস্টার সূচকের সাথে ধীরে ধীরে চলা time
এবং id
।
আমি এই দুটি পদ্ধতির কার্য সম্পাদনের সময় দ্বারা তুলনা করেছি। যোগদানের পদ্ধতিটি 16.3 সেকেন্ড সময় নেয় এবং উইন্ডো ফাংশন পদ্ধতিটি 20 সেকেন্ড সময় নেয়, সূচি তৈরির সময়টি অন্তর্ভুক্ত করে না। এটি আমাকে বিস্মিত করেছে কারণ উইন্ডোটির কার্যকারিতাটি উন্নত বলে মনে হচ্ছে যখন যোগদানের পদ্ধতিগুলি জোরদার।
দুটি পদ্ধতির কোড এখানে:
সূচি তৈরি করুন
create clustered index id_time
on tab1 (id,time)
যোগদানের পদ্ধতি
select a1.id,a1.time
a1.value as value,
b1.value as value_lag,
c1.value as value_lead
into tab2
from tab1 a1
left join tab1 b1
on a1.id = b1.id
and a1.time-1= b1.time
left join tab1 c1
on a1.id = c1.id
and a1.time+1 = c1.time
আইও পরিসংখ্যানগুলি ব্যবহার করে উত্পন্ন SET STATISTICS TIME, IO ON
:
এখানে যোগদানের পদ্ধতির কার্যকরকরণ পরিকল্পনা রয়েছে
উইন্ডো ফাংশন পদ্ধতি
select id, time, value,
lag(value,1) over(partition by id order by id,time) as value_lag,
lead(value,1) over(partition by id order by id,time) as value_lead
into tab2
from tab1
(কেবলমাত্র অর্ডার দেওয়ার time
ফলে ০.৫ সেকেন্ডের সঞ্চয় হয়)
উইন্ডো ফাংশন পদ্ধতির কার্যকরকরণ পরিকল্পনা এখানে রয়েছে
আইও পরিসংখ্যান
[
আমি তথ্যটি পরীক্ষা করে দেখলাম sample_orig_month_1999
এবং মনে হচ্ছে কাঁচা তথ্য ভালভাবে অর্ডার করেছে id
এবং time
। এটিই কি পারফরম্যান্স পার্থক্যের কারণ?
দেখে মনে হচ্ছে উইন্ডো ফাংশন পদ্ধতির তুলনায় জোড় পদ্ধতিতে আরও যৌক্তিক পাঠ রয়েছে, তবে পূর্বেরটির কার্যকর করার সময়টি আসলে কম is এটি কি কারণ পূর্ববর্তীটির আরও ভাল সমান্তরালতা আছে?
সংক্ষিপ্ত কোডের কারণে আমি উইন্ডো ফাংশন পদ্ধতিটি পছন্দ করি, এই নির্দিষ্ট সমস্যার জন্য এটির গতি বাড়ানোর কোনও উপায় আছে কি?
আমি উইন্ডোজ 10 64 বিটে এসকিউএল সার্ভার ব্যবহার করছি using