আমি শুধু কৌতূহল কেন একটি সামগ্রিক ক্যোয়ারী GROUP BY
ছাড়াই একটি ধারা ছাড়া এত দ্রুত চলে ।
উদাহরণস্বরূপ, এই কোয়েরিটি চালাতে প্রায় 10 সেকেন্ড সময় নেয়
SELECT MIN(CreatedDate)
FROM MyTable
WHERE SomeIndexedValue = 1
যদিও এটি এক সেকেন্ডের চেয়ে কম সময় নেয়
SELECT MIN(CreatedDate)
FROM MyTable
WHERE SomeIndexedValue = 1
GROUP BY CreatedDate
CreatedDate
এক্ষেত্রে কেবল একটিই রয়েছে, সুতরাং গোষ্ঠীযুক্ত ক্যোয়ারী অদলিতদের মতো একই ফলাফল প্রদান করে।
আমি লক্ষ্য করেছি যে দুটি প্রশ্নের জন্য মৃত্যুদণ্ড কার্যকর করার পরিকল্পনাগুলি আলাদা - দ্বিতীয় ক্যোয়ারী সমান্তরালতা ব্যবহার করে যখন প্রথম ক্যোয়ারীটি না করে।
এসকিউএল সার্ভারের যদি সামগ্রীর ক্যোয়ারির গ্রুপ বা গ্রুপ না থাকে তবে আলাদাভাবে মূল্যায়ন করা কি সাধারণ? এবং কোন GROUP BY
ধারা না ব্যবহার করে 1 ম ক্যোয়ারির কার্যকারিতা উন্নত করতে আমি কি কিছু করতে পারি ?
সম্পাদন করা
আমি মাত্র শিখেছি আমি OPTION(querytraceon 8649)
0 টিতে সমান্তরালতার ব্যয় ওভারহেড সেট করতে ব্যবহার করতে পারি , যা কোয়েরিকে কিছুটা সমান্তরালতা ব্যবহার করে এবং রানটাইমকে 2 সেকেন্ডে হ্রাস করে, যদিও আমি জানি না যে এই কোয়েরি ইঙ্গিতটি ব্যবহার করার কোনও ডাউনসাইড রয়েছে কিনা তা আমি জানি না।
SELECT MIN(CreatedDate)
FROM MyTable
WHERE SomeIndexedValue = 1
OPTION(querytraceon 8649)
আমি এখনও একটি সংক্ষিপ্ত রানটাইম পছন্দ করব যেহেতু কোয়েরিটি ব্যবহারকারী নির্বাচনের উপর ভিত্তি করে একটি মানকে বোঝায়, তাই আদর্শভাবে গ্রুপযুক্ত ক্যোয়ারির মতো তাত্ক্ষণিক হওয়া উচিত। এই মুহূর্তে আমি কেবল আমার জিজ্ঞাসাটি মোড়ানো করছি, তবে আমি জানি এটি আসলেই একটি আদর্শ সমাধান নয়।
SELECT Min(CreatedDate)
FROM
(
SELECT Min(CreatedDate) as CreatedDate
FROM MyTable WITH (NOLOCK)
WHERE SomeIndexedValue = 1
GROUP BY CreatedDate
) as T
সম্পাদনা # 2
আরও তথ্যের জন্য মার্টিনের অনুরোধের প্রতিক্রিয়া :
উভয় CreatedDate
এবং এগুলির SomeIndexedValue
একটি পৃথক অ-অনন্য, নন-ক্লাস্টারযুক্ত সূচক রয়েছে। SomeIndexedValue
প্রকৃতপক্ষে একটি বর্ণচর্চা ()) ক্ষেত্র, যদিও এটি একটি সংখ্যাসম্য সংরক্ষণ করে যা অন্য সারণির পিকে (ইনট) এর দিকে নির্দেশ করে। দুটি টেবিলের মধ্যে সম্পর্ক ডেটাবেসে সংজ্ঞায়িত করা হয়নি। আমার মোটেও ডাটাবেস পরিবর্তন করার কথা নয়, এবং কেবলমাত্র কোয়েরি ডেটা অনুসন্ধান করে লিখতে পারি।
MyTable
3 মিলিয়নেরও বেশি রেকর্ড রয়েছে এবং প্রতিটি রেকর্ডে এমন একটি গোষ্ঠী নির্ধারিত হয় যা এটি ( SomeIndexedValue
) এর অন্তর্গত । গ্রুপগুলি 1 থেকে 200,000 রেকর্ড পর্যন্ত যে কোনও জায়গায় হতে পারে
MAXDOP
সমান্তরালতার সর্বোচ্চ ডিগ্রি সেট করে যা কোয়েরিটি ব্যবহার করতে পারে এমন প্রসেসরের সংখ্যা সীমাবদ্ধ করে দেয়। এটি মূলত ২ য় ক্যোয়ারিকে প্রথম মেনের মতো ধীর করে দেবে, যেহেতু এটি সমান্তরালতা ব্যবহারের সক্ষমতা অপসারণ করছে, যা আমি চাই না।