লজিকাল অপারেটরগুলি এবং শর্তের শর্ত অনুযায়ী WHERE


33

আসুন এই দুটি বিবৃতি পরীক্ষা করুন:

IF (CONDITION 1) OR (CONDITION 2)
...

IF (CONDITION 3) AND (CONDITION 4)
...

যদি CONDITION 1হয় TRUE, CONDITION 2চেক করা হবে?
যদি CONDITION 3হয় FALSE, CONDITION 4চেক করা হবে?

শর্তাবলী সম্পর্কে কী WHERE: এসকিউএল সার্ভার ইঞ্জিন কোনও শর্তে সমস্ত শর্তগুলি অনুকূল করে WHERE? প্রোগ্রামাররা কি এসকিউএল সার্ভার অপ্টিমাইজারটিকে সঠিক উপায়ে সমাধান করে তা নিশ্চিত করার জন্য শর্তগুলি সঠিক ক্রমে রাখা উচিত ?

যোগ করেছেন:

লিঙ্কের জন্য জ্যাককে ধন্যবাদ, টি-স্কেল কোড থেকে বিস্মিত:

IF  1/0 = 1 OR 1 = 1
      SELECT 'True' AS result
ELSE
      SELECT 'False' AS result


IF  1/0 = 1 AND 1 = 0
      SELECT 'True' AS result
ELSE
      SELECT 'False' AS result

এই ক্ষেত্রে শূন্য ব্যতিক্রম দ্বারা কোনও বিভাজন উত্থাপন করা হয় না ।

উপসংহার:

যদি সি ++ / সি # / ভিবিতে শর্ট সার্কিট হয় তবে এসকিউএল সার্ভার কেন তা করতে পারে না?

সত্যই এর উত্তর দিতে আসুন একনজরে দেখে নেওয়া যাক কীভাবে উভয় শর্তে কাজ করে with সি ++ / সি # / ভিবি সকলের কোড প্রয়োগের গতি বাড়ানোর জন্য ভাষা নির্দিষ্টকরণে সংক্ষিপ্ত সার্কিটের সংজ্ঞা দেওয়া আছে। যখন প্রথমটি ইতিমধ্যে সত্য বা এম ও শর্ত যখন প্রথমটি ইতিমধ্যে মিথ্যা থাকে তখন এন বা শর্তগুলির মূল্যায়ন কেন বিরক্ত হয় other

বিকাশকারী হিসাবে আমাদের সচেতন হতে হবে যে এসকিউএল সার্ভারটি ভিন্নভাবে কাজ করে। এটি ব্যয়ভিত্তিক সিস্টেম is আমাদের ক্যোয়ারির জন্য সর্বোত্তম বাস্তবায়ন পরিকল্পনা পেতে ক্যোয়ারী প্রসেসরকে প্রতিটি অবস্থার মূল্যায়ন করতে হবে এবং এটিকে একটি ব্যয় নির্ধারণ করতে হবে। এই ব্যয়গুলি তখন একটি প্রান্তিক গঠনের জন্য সামগ্রিকভাবে মূল্যায়ন করা হয় যা একটি ভাল পরিকল্পনার জন্য সংজ্ঞায়িত থ্রেশহোল্ড এসকিউএল সার্ভারের চেয়ে কম হওয়া আবশ্যক। যদি ব্যয় নির্ধারিত প্রান্তিকের চেয়ে কম হয় তবে পরিকল্পনাটি ব্যবহৃত না হলে পুরো ব্যয়টি আবার শর্ত ব্যয়ের একটি ভিন্ন মিশ্রণের সাথে পুনরাবৃত্তি করা হয়। এখানে ব্যয় হয় হয় স্ক্যান বা সন্ধান বা মার্জ যোগ বা হ্যাশ জয়েন ইত্যাদি ... এর কারণে সি ++ / সি # / ভিবিতে সহজ শর্ট সার্কিট সম্ভব নয়। আপনি মনে করতে পারেন যে কোনও কলামে সূচকের ব্যবহারকে শর্ট সার্কিট হিসাবে গণ্য করা হয় তবে তা হয় না। এটি কেবলমাত্র সেই সূচকটি ব্যবহার করতে বাধ্য করে এবং এর সাথে সম্ভাব্য সম্পাদন পরিকল্পনার তালিকা সংক্ষিপ্ত করে। সিস্টেম এখনও ব্যয় ভিত্তিক।

একজন বিকাশকারী হিসাবে আপনাকে অবশ্যই সচেতন থাকতে হবে যে এসকিউএল সার্ভার শর্ট সার্কিট যেমন অন্য প্রোগ্রামিং ভাষায় করা হয় তেমন করে না এবং এটি জোর করার জন্য আপনার কিছুই করার নেই।


চূড়ান্ত উদ্ধৃতি ব্লক কোথা থেকে? আপনি একটি রেফারেন্স যোগ করতে পারেন?
নিক চাম্মাস

উত্তর:


25

এসকিউএল সার্ভারে কোনও গ্যারান্টি নেই যদি বা কোন আদেশে বিবৃতিতে একটি WHEREধারাতে প্রক্রিয়া করা হবে । একক অভিব্যক্তি যা বিবৃতিকে সংক্ষিপ্ত-প্রচারের অনুমতি দেয় তা হ'ল CASE- WHEN। স্ট্যাকওভারফ্লোতে পোস্ট করা একটি উত্তর থেকে নীচে:

কীভাবে এসকিউএল সার্ভার শর্ট সার্কিট যেখানে শর্ত মূল্যায়ন

এটি যখন এটির মতো অনুভূত হয় তখন তা ঘটে তবে আপনি অবিলম্বে যেভাবে ভাবেন সেভাবে নয়।

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

আরও তথ্যের জন্য উপরের ব্লগ এন্ট্রিটির প্রথম লিঙ্কটি পরীক্ষা করুন, যা অন্য ব্লগের দিকে নিয়ে যাচ্ছে:

এসকিউএল সার্ভার শর্ট সার্কিট?

চূড়ান্ত রায়? ঠিক আছে, আমার কাছে এখনও সত্যিই একটি নেই, তবে এটি সম্ভবত নিরাপদ যে আপনি যখন কোনও সিএসই এক্সপ্রেশনটিতে একাধিক WHEN শর্ত প্রকাশ করেন তখনই আপনি নির্দিষ্ট শর্ট সার্কিটটি নিশ্চিত করতে পারবেন say স্ট্যান্ডার্ড বুলিয়ান এক্সপ্রেশন সহ, আপনি যে সারণী, সূচীগুলি এবং ডেটা অনুসন্ধান করছেন তার উপর ভিত্তি করে অপ্টিমাইজার জিনিসগুলি প্রায় সরবে।


2
স্পষ্টতই কিছু প্রান্তের মামলা রয়েছে (বা কোনও বাগ) যেখানে এমনকি case নিরাপদ নেই
জ্যাক ডগলাস

1
আমি আরও একটি কেস (হা!) প্রদর্শন করি যেখানে CASEবিরতি ঘটে
অ্যারন বার্ট্র্যান্ড


0

এসকিউএল একটি ঘোষিত প্রোগ্রামিং ভাষা। ভিন্ন, বলুন, সি ++ যা একটি অত্যাবশ্যক প্রোগ্রামিং ভাষা।

অর্থাৎ আপনি শেষ ফলাফলটিতে কী চান তা বলতে পারবেন , তবে ফলাফল কীভাবে কার্যকর করা হচ্ছে তা আপনি নির্ধারণ করতে পারবেন না , এটি ইঞ্জিনের উপর নির্ভর করে।

ভিতরে "শর্ট-সার্কিট" (বা অন্য কোনও নিয়ন্ত্রণ প্রবাহ ) গ্যারান্টি দেওয়ার একমাত্র আসল উপায় WHEREহ'ল ইনডেক্সড ভিউ, অস্থায়ী সারণী এবং অনুরূপ প্রক্রিয়া।

গীত। আপনি এক্সিকিউশন প্ল্যানের ইঙ্গিতগুলিও ব্যবহার করতে পারেন (ইঞ্জিনটিকে "কীভাবে একটি ক্যোয়ারী কার্যকর করতে হবে তা বোঝাতে", কোন সূচকগুলি ব্যবহার করতে হবে এবং কীভাবে এটি ব্যবহার করতে হবে), কেবল ভেবেছিলাম আমার উল্লেখ করা উচিত, যখন আমরা এই বিষয়টিতে থাকি ...


-4

1) - বা (যে কোনও একটি বা উভয় শর্ত সত্য হবে)

যদি শর্ত 1 সত্য হয় তবে শর্ত 2 এটিও সত্য বা মিথ্যা হতে পারে যাচাই করবে

- এবং (উভয় শর্ত অবশ্যই সত্য)

কন্ডিশন যদি 1 টি মিথ্যা হয় তবে শর্ত 2 পরীক্ষা করা হবে না


"যদি শর্ত 1 মিথ্যা হয় তবে শর্ত 2 পরীক্ষা করা হবে না" এটি সত্য নয়। উপরে উত্তর দেখুন । এসকিউএল সার্ভার এখনও শর্ত 2 মূল্যায়ন করতে পারে কারণ এটি WHEREধারাগুলিতে শর্ট সার্কিট মূল্যায়ন করে না ।
নিক চ্যামাস

-4

WHERE ধারাটির শর্তাবলী কীভাবে নিয়ন্ত্রণের একমাত্র উপায় হ'ল বন্ধনীগুলি একসাথে গ্রুপবদ্ধ করা use

WHERE Col1 = 'Something' AND Col2 = 'Something' OR Col3 = 'Something' and Col4 = 'Something'

থেকে খুব আলাদা

WHERE (Col1 = 'Something' AND Col2 = 'Something') OR (Col3 = 'Something' and Col4 = 'Something')

উৎসুক. এই দুটি শর্ত কীভাবে আলাদা? বিভিন্ন ফলাফল, কার্য সম্পাদন, বাস্তবায়ন পরিকল্পনা? আমি ভেবেছিলাম তারা সমতুল্য হবে।
ypercubeᵀᴹ

প্রথমটির সাথে আপনার কল 1, কল 4 এবং কোল 2 বা কল 3 এর সাথে মিল থাকতে হবে। দ্বিতীয় লাইনে কল 1 এবং কল 2 মেলানোর জন্য বা আপনার কল 3 এবং কল 4 মিলানো দরকার তবে কল 1 এবং কল 4 কখনই দুজনের একসাথে মূল্যায়ন করার প্রয়োজন হবে না।
mrdenny

1
না তুমি ভুল. ANDএর চেয়ে বেশি অগ্রাধিকার রয়েছে OR। দুটোই সমান। আপনি যা বলেন তা WHERE Col1 = x AND (Col2 = x OR Col3 = x) AND Col4 = xক্যোয়ারির জন্য সত্য হবে । দেখুন এসকিউএল বেহালার পরীক্ষা
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.