MIN / MAX বনাম অর্ডার এবং লিমিটেড


104

নিম্নলিখিত প্রশ্নাগুলির মধ্যে আপনি কোন পদ্ধতিটিকে আরও ভাল হিসাবে বিবেচনা করবেন? আপনার কারণগুলি কী (কোড দক্ষতা, আরও ভাল রক্ষণাবেক্ষণ, কম ডাব্লুটিফাই) ...

SELECT MIN(`field`)
FROM `tbl`;

SELECT `field`
FROM `tbl`
ORDER BY `field`
LIMIT 1;

উত্তর:


130

সবচেয়ে খারাপ ক্ষেত্রে, যেখানে আপনি একটি শৃঙ্খলাবদ্ধ ক্ষেত্রের দিকে তাকিয়ে আছেন সেখানে ব্যবহারের MIN()জন্য সারণির একক পূর্ণ পাসের প্রয়োজন। ব্যবহার SORTএবং LIMITএকটি ফাইলসোর্ট প্রয়োজন। যদি কোনও বড় টেবিলের বিরুদ্ধে চালানো হয় তবে পার্সিভাইড পারফরম্যান্সে সম্ভবত একটি উল্লেখযোগ্য পার্থক্য থাকবে। অর্থহীন ডেটা পয়েন্ট হিসাবে, MIN().36 সেকেন্ড সময় নিয়েছিল SORTএবং LIMITআমার দেব সার্ভারে 106,000 সারি টেবিলের বিপরীতে .84 গুলি নিয়েছিল।

তবে, আপনি যদি কোনও সূচিকৃত কলামটি দেখছেন তবে পার্থক্যটি লক্ষ্য করা শক্ত is (উভয় ক্ষেত্রে অর্থহীন ডাটা পয়েন্ট 0.00s)। ব্যাখ্যাটির ফলাফলের দিকে তাকালে, দেখে মনে MIN()হচ্ছে এটি সূচক থেকে সর্বাধিকতম মানটি তুলতে সক্ষম হয়েছে ('টেবিলগুলি অপ্টিমাইজড সরিয়ে ফেলুন ' এবং 'এনইউএল' সারিগুলি রয়েছে) SORTএবং LIMITএখনও সূচকে একটি আদেশযুক্ত ট্র্যাভারসাল করার প্রয়োজন রয়েছে needs (106,000 সারি)। প্রকৃত পারফরম্যান্সের প্রভাবটি সম্ভবত নগণ্য।

দেখে মনে হচ্ছে এটি চলার MIN()উপায় - এটি সবচেয়ে খারাপ ক্ষেত্রে দ্রুততর, সেরা ক্ষেত্রে পৃথক পৃথক, এটি স্ট্যান্ডার্ড এসকিউএল এবং সর্বাধিক স্পষ্টভাবে আপনি যে মানটি পাওয়ার চেষ্টা করছেন তা প্রকাশ করে। একমাত্র ক্ষেত্রে যেখানে মনে হয় যে ব্যবহার SORTএবং LIMITপছন্দসই হবে, যেমনটি মিসান উল্লেখ করেছেন, যেখানে আপনি একটি সাধারণ অপারেশন লিখছেন যা স্বেচ্ছাসেবী কলামগুলি থেকে উপরের বা নীচের এন মানগুলি খুঁজে পায় এবং বিশেষ-কেস অপারেশনটি লেখার পক্ষে মূল্যহীন নয়।


7
ও (এন) বাছাইয়ের জন্য একটি একক পাসের জন্য বনাম 0 (এনলগন)
অভিষেক আইয়ার

4
@ অভিষেকআইয়ার আপনি সম্পূর্ণরূপে সঠিক, তবে আমি "আনইনডেক্স ক্ষেত্রের জন্য সবচেয়ে খারাপ ক্ষেত্রে" যোগ করব।
dmikam

সবচেয়ে খারাপ আনইন্ডেক্সেড কেস সম্পর্কে সেই অংশটি ভুল। আপনার সর্বদা একটি পূর্ণ স্ক্যানের প্রয়োজন, আপনি কীভাবে জানবেন যে এটি ন্যূনতম বা সর্বোচ্চ? এটি স্ক্যান করার মতো নয় এবং মানটি চিৎকার করে: "আরে, আপনি আমাকে শেষ পর্যন্ত খুঁজে পেয়েছেন! আমি জ্যাক, সর্বোচ্চ!"!
রোবো রোবোক

470 মিলিয়ন সারি সহ সূচকযুক্ত টেবিলের সাথে একটি পরীক্ষায়, উভয় প্রশ্নের 0.00 সেকেন্ড লাগে। তবে, যদি আমরা "WHERE ফিল্ড 2 = x" ফিল্টারগুলিতে ক্যোয়ারী যুক্ত করি, LIMIT এর সাথে ক্যোয়ারীটি এখনও 0.00 সেকেন্ড নেয় এবং এমআইএন-এর সাথে ক্যোয়ারী 0.21 সেকেন্ড নেয়।
আন্তোনিও কায়াস ভার্গাস

13
SELECT MIN(`field`)
FROM `tbl`;

কেবল এটি এএনএসআই সামঞ্জস্যপূর্ণ কারণ। সীমা 1 মাইএসকিএল-তে বিশেষ যেমন শীর্ষস্থানীয় এসকিউএল সার্ভারের।


বেশিরভাগ ডিবিএমএসের সীমা / অফসেট বা সমতুল্য থাকে এবং এটি আমি কাজ করেছি এমন বেশিরভাগ অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় (
এমআইএন এর

@ ফিন্বইউ - আমি সম্মত, তবে প্রশ্নকর্তার উদাহরণটি সীমাবদ্ধতার সাথে সুস্পষ্টভাবে তুলনা করছিল।
ওটিভিও ডেসিও

10

মিশন এবং শন ম্যাকসোমথিং হিসাবে সরু আউট আছে, MIN এর শ্রেয়।

অর্ডার বাই + লিমিটেডের আরও একটি কারণ যেখানে আপনি এমআইএন কলামের চেয়ে আলাদা কলামের মান পেতে চান is

উদাহরণ:

SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1

4

আমি মনে করি উত্তরগুলি আপনি কী করছেন তার উপর নির্ভর করে।

আপনার যদি 1 টি বন্ধ জিজ্ঞাসা থাকে এবং অভিপ্রায়টি আপনার নির্দিষ্ট হিসাবে সাদামাটা, মিনিট (ক্ষেত্র) নির্বাচন করা ভাল।

যাইহোক, এই ধরণের প্রয়োজনীয়তাগুলিতে - শীর্ষস্থানীয় ফলাফলগুলি অর্জন করুন, এনটিএইচ - ম্যাথ রেজাল্ট ইত্যাদি গ্রহণ করা সাধারণ is

আমি মনে করি না যে এটি আপনার নির্বাচিত ডাটাবেসে প্রতিশ্রুতিবদ্ধ করার পক্ষে খুব ভয়ঙ্কর ধারণা। ডিবিএস পরিবর্তন করা হালকাভাবে করা উচিত নয় এবং আপনি যখন এই পদক্ষেপটি গ্রহণ করবেন তখন আপনার মূল্য দিতে হবে সংশোধন করতে হবে।

কেন নিজেকে এখনই সীমাবদ্ধ রাখুন, ব্যথার জন্য আপনি পরে বা অনুভব করতে পারেন?

আমি মনে করি যতটা সম্ভব এএনএসআই থাকা ভাল তবে এটি কেবল একটি গাইডলাইন ...


3

গ্রহণযোগ্য পারফরম্যান্স দেওয়া আমি প্রথমটি ব্যবহার করব কারণ এটি শব্দার্থগতভাবে উদ্দেশ্যটির কাছাকাছি।
পারফরম্যান্সটি যদি কোনও সমস্যা হয়ে থাকে, (বেশিরভাগ আধুনিক অপ্টিমাইজারগুলি উভয়কে একই ক্যোয়ারী পরিকল্পনায় যথাযথভাবে অনুকূলিত করবে, যদিও এটি যাচাই করতে আপনাকে পরীক্ষা করতে হবে) তবে অবশ্যই আমি দ্রুতটি ব্যবহার করব।

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