ইসনুল বনাম কোলেসির পারফরম্যান্স পার্থক্য?


48

আমি অনেক লোককে ISNULL এর জায়গায় COALESCE ফাংশনটি ব্যবহার করতে দেখেছি। ইন্টারনেট অনুসন্ধান থেকে, আমি খুঁজে পেয়েছি যে কোলেস এএনএসআই মান, সুতরাং এটির একটি সুবিধা রয়েছে যা আমরা এটি ব্যবহার করার সময় কী প্রত্যাশা করা উচিত তা জানি know যাইহোক, ইসনুল পড়তে সহজ বলে মনে হচ্ছে যেহেতু এটি কী করছে তা আরও পরিষ্কার।

আমি আরও বুঝতে পারি যে আইএসএনএলএল এক ধরণের কৌশলযুক্ত কারণ এটি বিভিন্ন ডাটাবেস সার্ভারে এবং বিভিন্ন ভাষায় ভিন্নভাবে কাজ করে।

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


1
আমি উত্তরের কোনওটিতে উল্লিখিত দেখতে পাচ্ছি না যে একটি সাব COALESCE কোয়েরিতে দুটিবার মূল্যায়ন হয়।
মার্টিন স্মিথ

4
"ISNULL এটি পড়ার পক্ষে সহজ বলে মনে হচ্ছে যেহেতু এটি আরও স্পষ্ট মনে হচ্ছে এটি কি করছে" - সত্যই? আমি নামটি পাল্টা-অনিচ্ছাকৃত বলে মনে করি: আমি এটি প্রত্যাশা করব যে এটি কোনও বুলিয়ান প্রত্যাবর্তন করবে যা নির্দেশ করে যে কোনও অভিব্যক্তিটি বাতিল বা অজানাতে সমাধান হয়েছে কিনা resolved নামটি COALESCEনিখরচায়;)
onedaywhen

উত্তর:


26

COALESCEঅভ্যন্তরীণভাবে একটি CASEঅভিব্যক্তিতে অনুবাদ করা হয় , ISNULLএটি একটি অভ্যন্তরীণ ইঞ্জিন ফাংশন।

COALESCEএকটি এএনএসআই মানক ফাংশন, ISNULLটি-এসকিউএল।

পারফরম্যান্স পার্থক্য দেখা দিতে পারে এবং করতে পারে যখন পছন্দটি কার্যকর করার পরিকল্পনাটিকে প্রভাবিত করে তবে কাঁচা ফাংশনের গতির মধ্যে পার্থক্য হ্রাস করা হয়


40
  • আইএসএনইউএল হ'ল সিবাজ / এসকিউএল সার্ভার নির্দিষ্ট
  • COALESCE পোর্টেবল

তারপর

  • ISNULL 2 টি যুক্তি নেবে
  • COALESCE এ 1-এন আর্গুমেন্ট নেয়

অবশেষে, এবং মজা বিট। ফলাফল ডেটাটাইপ এবং দৈর্ঘ্য / নির্ভুলতা / স্কেল

এই শেষ বিটটি কারণেই সাধারণত ইসনুল ব্যবহৃত হয় কারণ এটি আরও অনুমানযোগ্য (?) এবং কোলেসই অবিচ্ছিন্ন ডেটা ধরণের রূপান্তরগুলি যুক্ত করতে পারে: যা থেকে এটি "ধীর" বিট আসে

DECLARE @len10 varchar(10); --leave it NULL
SELECT
    ISNULL(@len10, '0123456789ABCDEF'),     -- gives 0123456789
    COALESCE(@len10, '0123456789ABCDEF');   -- gives 0123456789ABCDEF

সমস্ত ডেটাটাইপগুলি একই রকম, আপনি কোনও ব্যবহারিক পার্থক্য দেখতে পাবেন না ...


22

মার্ক ইঙ্গিত হিসাবে, আপনি পারফরম্যান্স পার্থক্য সন্ধান করতে কঠোর চাপ দেওয়া হবে; আমি মনে করি অন্যান্য কারণগুলি আরও গুরুত্বপূর্ণ হবে। আমার জন্য, আমি সর্বদা COALESCE ব্যবহার করি এবং এর বেশিরভাগটি ইতিমধ্যে আপনার বা মার্ক দ্বারা উল্লেখ করা হয়েছে:

  • COALESCE এএনএসআই মান। আমি আমার কোডটি পোর্ট করতে যাচ্ছি কিনা তা নিয়ে আমার চিন্তিত হওয়া আরও একটি কম বিষয়। আমার পক্ষে ব্যক্তিগতভাবে এটি তাত্পর্যপূর্ণ নয়, কারণ আমি জানি যে সেল্কোর শ্রেণিকক্ষের জগতের বাইরে এই জাতীয় বন্দরগুলি আসলে কখনই ঘটে থাকে, তবে কিছু লোকের পক্ষে এটি একটি সুবিধা।
  • আপনি পাঠযোগ্যতা সম্পর্কে কি বলেন পক্ষান্তরে আমি এটা হতে পারে এটি কঠিন বিশেষত ব্যবহারকারীদের অন্যান্য ভাষায় বা প্ল্যাটফর্মের যেখানে ISNULL একটি বুলিয়ান (যা SQL সার্ভার বিদ্যমান নেই) ফেরৎ থেকে আসার জন্য ISNULL পড়তে। মঞ্জুর, COALESCE বানান কঠিন, কিন্তু কমপক্ষে এটি ভুল অনুমানের দিকে পরিচালিত করে না।
  • COALESCE অনেক বেশি নমনীয়, যেমন আমি বলতে পারি COALESCE (a, b, c, d) যদিও ISNULL এর সাথে একই জিনিস অর্জনের জন্য আমাকে অনেক বাসা বাঁধতে হয়েছিল।

আপনার যদি নিশ্চিত হওয়া উচিত যে আপনি যদি ডেটা টাইপ অগ্রাধিকার দুটি ফাংশন ব্যবহার করে পরিচালনা করেন তবে আপনি যদি এটি বিভিন্ন ডেটা টাইপ / স্পষ্টতা ইত্যাদি ব্যবহার করে থাকেন তবে আপনি সচেতন ছিলেন are

বিঃদ্রঃ

একটি ব্যতিক্রম আছে। এসকিউএল সার্ভারের বর্তমান সংস্করণগুলিতে এগুলি আলাদাভাবে পরিচালনা করা হয়:

SELECT COALESCE((SELECT some_aggregate_query),0); 

SELECT ISNULL((SELECT some_aggregate_query),0); 

COALESCEবৈকল্পিক আসলে চালানো হবে some_aggregate_query(মান চেক করতে একবার, এবং একদা এটিকে ফিরতে যখন নন-জিরো) দুইবার, যখন ISNULLশুধুমাত্র subquery একবার চালানো হবে। আমি এখানে কয়েকটি অন্যান্য পার্থক্য সম্পর্কে কথা বলি:

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