অনুমোদনের উত্স যে <> এবং! = এসকিউএল সার্ভারে পারফরম্যান্সে অভিন্ন


74

অপারেটর সম্পর্কে প্রশ্নকারীকে আশ্বাস দেয় এমন এসও-তে এই উত্তরটি বিবেচনা করুন <>:

<>হয় ... হিসাবে একই !=

কিন্তু তারপরে একজন কমেন্টার পাইপ আপ করে বলে:

এটি সত্য যে তারা কার্যকরীভাবে একই। তবে এসকিউএল অপ্টিমাইজার কীভাবে সেগুলি ব্যবহার করে তা খুব আলাদা। = /! = কেবল সত্য / মিথ্যা হিসাবে মূল্যায়ন করা হয় যদিও <> এর অর্থ ইঞ্জিনটি দেখতে হবে এবং মানটি এর চেয়ে বেশি বা কম, অর্থাত্ অধিক কর্মক্ষমতা ওভারহেড কিনা তা দেখতে হবে। ব্যয়বহুল হতে পারে এমন ক্যোয়ারী লেখার সময় কিছু বিবেচনা করার জন্য।

আমি নিশ্চিত যে এটি মিথ্যা, তবে সম্ভাব্য সংশয়ীদের সমাধান করার জন্য, আমি অবাক হয়ে দেখি যে এই অপারেটরগুলি কেবল কার্যকরীভাবে একই নয়, তবে সমস্ত দিক থেকে অভিন্ন?

উত্তর:


144

বিশ্লেষণের সময় , এসকিউএল সার্ভার sqllang!DecodeCompOpউপস্থিত তুলনা অপারেটরের ধরণ নির্ধারণ করতে কল করে:

কল স্ট্যাক

অপ্টিমাইজারের কিছু জড়িত হওয়ার আগে এটি ভাল হয়।

তুলনা অপারেটর থেকে (লেনদেন-এসকিউএল)

তুলনা অপারেটর এবং অর্থ

একটি ডিবাগার এবং সর্বজনীন প্রতীক * ব্যবহার করে কোডটি সন্ধান করা, sqllang!DecodeCompOpনিবন্ধে eax** একটি মান প্রদান করে:

╔════╦══════╗
║ Op ║ Code ║
╠════╬══════╣
║ <  ║    1 ║
║ =  ║    2 ║
║ <= ║    3 ║
║ !> ║    3 ║
║ >  ║    4 ║
║ <> ║    5 ║
║ != ║    5 ║
║ >= ║    6 ║
║ !< ║    6 ║
╚════╩══════╝

!=এবং <>উভয়ই 5 ফেরত দেয়, সুতরাং পরবর্তী সমস্ত ক্রিয়াকলাপে (সংকলন এবং অপ্টিমাইজেশান সহ) আলাদা করা যায় না।


যদিও উপরের বিষয়টিতে গৌণ, তবুও এটি সম্ভব (উদাহরণস্বরূপ নথিভুক্ত ট্রেস পতাকা 8605 ব্যবহার করে) অপ্টিমাইজারের কাছে লজিক্যাল ট্রাকে পাস করা উভয়টি নিশ্চিত করার জন্য অপ্টিমাইজারে পাস হয়েছে !=এবং <>মানচিত্রটি ScaOp_Comp x_cmpNe(সমান স্কেলার অপারেটরের তুলনা নয়)।

উদাহরণ স্বরূপ:

SELECT P.ProductID FROM Production.Product AS P
WHERE P.ProductID != 4
OPTION (QUERYTRACEON 3604, QUERYTRACEON 8605);

SELECT P.ProductID FROM Production.Product AS P
WHERE P.ProductID <> 4
OPTION (QUERYTRACEON 3604, QUERYTRACEON 8605);

উভয় উত্পাদন:

লগপপ_প্রজেক্ট কিউসিওএল: [পি] r উত্পাদক ID
    LogOp_Select
        লগঅপ_গীত টিবিএল: উত্পাদনের.পণ্য উত্পাদন (ওরফে টিবিএল: পি)
        ScaOp_Comp x_cmpNe
            ScaOp_Identifier QCOL: [P]। উত্পাদক
            ScaOp_Const TI (int, ML = 4) XVAR (int, মালিকানাধীন নয়, মান = 4)
    AncOp_PrjList 

পাদটিকা

* আমি উইনডিবিজি ব্যবহার করি ; অন্যান্য ডিবাগারগুলি উপলব্ধ। সর্বজনীন প্রতীকগুলি সাধারণ মাইক্রোসফ্ট প্রতীক সার্ভারের মাধ্যমে উপলব্ধ। আরও তথ্যের জন্য, এসকিউএল সার্ভার গ্রাহক উপদেষ্টা টিম দ্বারা মিনিডাম্প এবং উইনডিবিজি-র সাথে এসকিউএল সার্ভার ডিবাগিং ব্যবহার করে এসকিউএল সার্ভারের আরও গভীরভাবে সন্ধান করুন - ক্লাউস আসচেনব্রেনারের পরিচিতি

** কোনও ক্রিয়াকলাপ থেকে রিটার্ন মানগুলির জন্য 32-বিট ইন্টেল ডেরাইভেটিভসে EAX ব্যবহার করা সাধারণ। অবশ্যই উইন 32 এবিআই সেভাবে এটি করে এবং আমি নিশ্চিত যে এটি পুরানো এমএস-ডস দিনগুলিতে ফিরে এসেছিল, যেখানে অক্ষ একই উদ্দেশ্যে ব্যবহৃত হয়েছিল - মাইকেল কেজারলিং


58

আমি এসকিউএল সাপোর্টে মাইক্রোসফ্টে কাজ করি এবং আমি এসকিউএল সার্ভারের পারফরম্যান্সের সিনিয়র এসকেলেশন ইঞ্জিনিয়ার এবং সাবজেক্ট ম্যাটার এক্সপার্ট জ্যাক লিকে জিজ্ঞাসা করেছি, "এসকিউএল কি <> <> এর চেয়ে আলাদাভাবে আচরণ করে?" এবং তিনি বললেন, "তারা একই রকম" "


8

আমি মনে করি নিম্নলিখিতটি <>2 টি তুলনা করে না তা প্রমাণ করে।

  1. এসকিউএল স্ট্যান্ডার্ড 92 সংখ্যক <>অপারেটর হিসাবে না হিসাবে সংজ্ঞায়িত করে ( http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt )। প্রযুক্তিগতভাবে, !=এটি স্ট্যান্ডার্ডের একটি এক্সটেনশন (যদিও আমি এমন কোনও আরডিবিএমএস সম্পর্কে চিন্তা করতে পারি না যা এটি প্রয়োগ করে না)।
  2. এসকিউএল সার্ভার যদি <>2 জন অপারেটর হিসাবে বিবেচিত হয়, একজন নয়, তবে এটি একই কাজ করবে ><যার জন্য আসলে সিনট্যাক্স ত্রুটি।

1

এটি ভুল, বই অনলাইন (বিওএল) বলে যে তারা কার্যত একই রকম:

! = (সমান নয়) (লেনদেন-এসকিউএল)

!=প্রেডিকেটের অধীনে আপনি যদি কোনও কার্যকরকরণ পরিকল্পনা ব্যবহার করেন তবে তা পরিবর্তিত != হয় <>


2
সমস্যাটি হ'ল ভাষাটি "কার্যকরভাবে একই" ইতিমধ্যে রেফারেন্সড মন্তব্যে স্বীকৃত হয়েছে, তবে আপনার এবং আমার জ্ঞান সত্ত্বেও এটি "কীভাবে কার্যত একই" এটি কীভাবে কাজ করে এবং এর কোনও কার্য সম্পাদন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করেও কার্য সম্পাদন সম্পর্কে একটি অতিরিক্ত পার্থক্য তৈরি করে makes যদি কেউ নির্ধারিত সন্দেহের বাইরেও এটি প্রমাণ করতে চলেছে তবে কেউ কী করবে?
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.