টিএসকিউএল কেন একটি ভেরিয়েবলের সাথে শীর্ষে দ্রুত?


10

সবাইকে শুভ সকাল,

আমি তৃতীয় পক্ষের পণ্য ডেটাবেস থেকে কিছু তথ্য 'প্রাপ্ত' করতে, ঘরের অ্যাপ্লিকেশনগুলিতে এটি নিজস্বভাবে প্রদর্শন করার জন্য কিছুটা মাঝারি জটিল স্কয়ারে কাজ করছি।

আমি একটি subquery মধ্যে একটি টেবিল থেকে শীর্ষ রেকর্ড পেতে একটি নির্বাচন যোগ করা হয়েছে (যদি thats এটি উপলব্ধি করে)

100 টি রেকর্ড ব্যবহার করে চূড়ান্ত ফলাফল সেটটি ফিরে আসতে ক্যোয়ারীটি প্রায় 3 মিনিট সময় নেয়

SELECT TOP 1 ...

আমি যা অর্জন করতে চাইছিলাম তার উন্নতির জন্য অনলাইনে নজর রেখেছি এবং প্রস্তাবিত হয়েছিল যে আমি নীচের মত একটি ভেরিয়েবল ব্যবহারের জন্য আমার নির্বাচনটি পরিবর্তন করব

DECLARE @topCount INT
SET @topCount = 1

SELECT TOP (@topCount) ...

এটি একই প্রশ্নটি 3 মিনিট থেকে শুরু করে 1 সেকেন্ডে নিয়েছে, যা দুর্দান্ত!

তবে কেউ কেন এটি এমন তা ব্যাখ্যা করতে পারেন।

উত্তর:


14

আপনি যখন top 1ক্যোয়ারী করবেন তখন অপ্টিমাইজার এমন একটি পরিকল্পনা তৈরি করবে যা যত তাড়াতাড়ি 1 সারি আনতে নির্মিত।

আপনি যখন স্থানীয় ভেরিয়েবল ব্যবহার করেন তখন ভেরিয়েবলের মান অপটিমাইজারের কাছে অজানা এবং পরিবর্তে একটি পরিকল্পনা তৈরি করে যা যত দ্রুত সম্ভব 100 টি সারি আনতে অনুকূলিত হয় optim

আপনার ক্ষেত্রে 100 টি সারি লক্ষ্য নিয়ে উত্পন্ন কোয়েরি প্ল্যানটি আপনি যখন কেবল একটি সারি চান তখনও ব্যবহার করার জন্য আরও ভাল পরিকল্পনা।

যাচাই করতে আপনি option (recompile)ভেরিয়েবলের সাথে আপনার ক্যোয়ারিতে যুক্ত করার চেষ্টা করতে পারেন । সেক্ষেত্রে এসকিউএল সার্ভার বর্তমান মানটি @topCountএকটি সারি লক্ষ্য হিসাবে ব্যবহার করবে এবং যেহেতু এটি 1 হ'ল আপনার ধীর পরিকল্পনাটি পাওয়া উচিত।


আমি পরিকল্পনার পার্থক্যটি বুঝতে পারি, তবে এটি আমাকে অবাক করে দেয় যে 1 সারি আনতে 100 সারি আনার চেয়ে ধীর হতে পারে। আমি ভাবব যে যদি 100-সারির পরিকল্পনাটি সর্বোত্তমভাবে কাজ করে তবে এসকিউএল সার্ভার এর জন্য একই পরিকল্পনা ব্যবহার করবে top 1
ব্র্যান্ডন

@ ব্র্যান্ডন এটি 100 টি সারি আনে না, কেবল 100 সারি যা চায় তা বাস্তবায়ন পরিকল্পনাটি তৈরি করে। 1 টি সারি পাওয়া গেলে কার্যকর করা শেষ হয়।
মিকেল এরিকসন

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