আমার নীচের কোয়েরি রয়েছে:
select databasename
from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source)
উপরের প্রশ্নটি তিন সেকেন্ডে সম্পূর্ণ হয়।
যদি উপরের ক্যোয়ারী কোনও মান দেয় তবে আমরা সঞ্চিত পদ্ধতিটি প্রস্থান করতে চাই, তাই আমি নীচের মতো এটি আবার লিখেছি:
If Exists(
select databasename
from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source)
)
Begin
Raiserror('Source missing',16,1)
Return
End
তবে এটি 10 মিনিট সময় নিচ্ছে।
আমি নীচের মত উপরের ক্যোয়ারীটি আবার লিখতে পারি, যা 3 সেকেন্ডেরও কম সময়ে পূর্ণ হয়:
select databasename
from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source
if @@rowcount >0
Begin
Raiserror('Source missing',16,1)
Return
End
উপরের পুনর্লিখনের বিষয়টি হ'ল উপরের ক্যোয়ারীটি বৃহত সঞ্চিত পদ্ধতির অংশ এবং এটি একাধিক ফলাফল সেটগুলি দেয়। সি # তে, আমরা প্রতিটি ফলাফলের সেটটি দিয়ে পুনরাবৃত্তি করি এবং কিছু প্রক্রিয়াজাত করি।
উপরেরটি একটি খালি ফলাফলের সেট দেয়, সুতরাং আমি যদি এই পদ্ধতির সাথে যাই তবে আমাকে আমার সি # পরিবর্তন করতে হবে এবং আবার স্থাপনা করতে হবে।
আমার প্রশ্নটি হ'ল
কেন কেবলমাত্র
IF EXISTS
এত বেশি সময় নেওয়ার পরিকল্পনা পরিবর্তিত হয়?
নীচে বিশদগুলি যা আপনাকে সহায়তা করতে পারে এবং আপনার যদি কোনও বিবরণ প্রয়োজন হয় তবে আমাকে জানান:
- খনি হিসাবে একই পরিকল্পনা পেতে সারণী এবং পরিসংখ্যান স্ক্রিপ্ট তৈরি করুন
- স্লো এক্সিকিউশন প্ল্যান
দ্রুত কার্যকর করার পরিকল্পনা
ব্রেন্টোজার ব্যবহার করে ধীরগতির পরিকল্পনাটি বেন্টুজার পেস্ট করে প্ল্যান্ট
প্ল্যান করুন প্লাস্টিকটি ফাস্ট প্ল্যান করুন
দ্রষ্টব্য: উভয় প্রশ্ন একই (পরামিতি ব্যবহার করে), একমাত্র পার্থক্য EXISTS
(যদিও বেনাম বানাতে গিয়ে আমি কিছু ভুল করে থাকতে পারি)।
সারণী তৈরির স্ক্রিপ্টগুলি নীচে রয়েছে:
http://pastebin.com/CgSHeqXc - ছোট টেবিলের পরিসংখ্যান
http://pastebin.com/GUu9KfpS - বড় টেবিলের পরিসংখ্যান