পিএল / পিজিএসকিউএল এবং প্লেইন এসকিউএল ফাংশন দুটি বৃহত্তর সরঞ্জাম সেটের অংশ, এবং সেই প্রসঙ্গে দেখা উচিত। আমি আরোহী জটিলতা এবং ব্যয়ের সাথে মিলে যাওয়া বিদ্যুতের একটি আরোহণের স্কেল হিসাবে বিবেচনা করি, যেখানে আপনার কাজটি ভালভাবে সম্পাদন করতে পারে এমন সহজতম সরঞ্জামটি ব্যবহার করা উচিত:
- যেখানে সম্ভব দেখুন দর্শন ব্যবহার করুন
- যেখানে দৃশ্যটি উপযুক্ত নয়, সেখানে একটি এসকিউএল ফাংশন ব্যবহার করুন
- যেখানে কোনও এসকিউএল ফাংশন উপযুক্ত নয়, সেখানে PL / PgSQL ব্যবহার করুন।
- যেখানে পিএল / পিজিএসকিউএল খুব সীমাবদ্ধ বা যথেষ্ট পরিমাণে মত প্রকাশযোগ্য নয়, সেখানে পিএল / পার্ল, পিএল / পাইথন, পিএল / ভি 8, পিএল / জাভা বা আপনার পছন্দগুলি যা ব্যবহার করুন
- ... এবং যেখানে কোনও পিএল কাজ করবে না, কোনও বাহ্যিক প্রোগ্রাম এবং সম্ভবত
LISTEN
এবং NOTIFY
এটির সাথে কথা বলার জন্য ব্যবহার করবে।
খুব ঘন ঘন একটি ভিউ যথেষ্ট যখন আপনি মনে করেন কোনও ফাংশন প্রয়োজন। এমনকি যদি এটি SELECT
সম্পূর্ণ দর্শনের জন্য অত্যন্ত ব্যয়বহুল হয় তবে WHERE
কোয়েরিতে থাকা দফাগুলিকে ভিউটি উল্লেখ করে সাধারণত দৃষ্টিতে ফেলে দেওয়া হয় এবং এর ফলে খুব আলাদা ক্যোয়ারী পরিকল্পনা হতে পারে। এসকিউএল ফাংশনগুলিকে দর্শনে রূপান্তর করা থেকে আমার প্রায়শই বড় পারফরম্যান্সের উন্নতি হয়েছিল।
আপনি যখন দেখতে পান যে মুখ্য সময় আপনি কোনও ভিউ ব্যবহার করতে পারবেন না এবং কোনও এসকিউএল ফাংশনটি বিবেচনা করা উচিত তা কখন:
- সাধারণ
WHERE
অনুচ্ছেদের হিসাবে প্রকাশ করা যায় না এমন পরামিতিগুলি প্রয়োজন, যেমন একটি WITH
অভিব্যক্তির মধ্যে প্যারামিটারের মতো
- আপনি কোনও
SECURITY DEFINER
ক্রিয়াকলাপের মাধ্যমে সুরক্ষা বাধা চান , এবং security_barrier
পোস্টগ্রিসকিউএল ৯.২ এবং এর চেয়ে উপরে দেখা আপনার প্রয়োজনের জন্য পর্যাপ্ত নয়;
- আপনার এমন প্যারামিটারগুলি দরকার যা অপ্টিমাইজারের দ্বারা দৃশ্যের উপ-অনুচ্ছেদে নামানো হয় না এবং এটি আরও সরাসরি নিয়ন্ত্রণ করতে চান; অথবা
- এখানে প্রচুর প্যারাম রয়েছে বা প্রচুর প্যারামগুলির পুনরাবৃত্তি রয়েছে, সুতরাং ক্যোয়ারীটিকে একটি ভিউ হিসাবে লিখতে পারা যায় না।
এই কাজের বেশিরভাগ ক্ষেত্রে একটি সরল এসকিউএল ফাংশন সূক্ষ্মভাবে কাজ করে এবং পিএল / পিজিএসকিউএল এর চেয়ে প্রায়শই পড়া সহজ হয়। এসকিউএল ফাংশন ঘোষিত STABLE
বা IMMUTABLE
(এবং এছাড়াও ঘোষিত STRICT
বা SECURITY DEFINER
) ও কলিং বিবৃতি মধ্যে inlined করা যেতে পারে। এটি ফাংশন কল ওভারহেড থেকে মুক্তি পায় এবং কলিং ফাংশনটিতে যখন কোনও শর্তটি অপ্টিমাইজারের দ্বারা এসকিউএল ফাংশনটিতে নামিয়ে আনে তখন কখনও কখনও বিশাল কর্মক্ষমতা বেনিফিটও পেতে পারে। এসকিউএল ফাংশনগুলি যখনই কাজের জন্য যথেষ্ট হয় তখন ব্যবহার করুন।
যখন আপনার প্রচুর যুক্তি প্রয়োজন তখন মূল সময় এসকিউএল ফাংশন কাজটি করে না। যদি / তারপরে / অন্য কোনও ক্রিয়াকলাপ যা আপনি CASE
বিবৃতি হিসাবে প্রকাশ করতে পারবেন না , গণনা করা ফলাফলের প্রচুর পুনঃব্যবহার, খণ্ডগুলি থেকে মান তৈরি করা, ত্রুটি পরিচালনা করা ইত্যাদি PL পিএল / পিজিএসকিউএল তখন কাজে আসে। আপনি যখন এসকিউএল ফাংশনগুলি ব্যবহার করতে পারবেন না বা এগুলি যেমন একটি নিম্ন ফিট, তখন PL / PgSQL চয়ন করুন:
EXECUTE
স্টেটমেন্টের মাধ্যমে ডায়নামিক এসকিউএল এবং গতিশীল ডিডিএল
- আপনি যখন
RAISE
লগ বা ক্লায়েন্টের জন্য ত্রুটি / সতর্কতা করতে চান
- যখন আপনার ব্যতিক্রম হ্যান্ডলিংয়ের দরকার হয় -
EXCEPTION
পুরো লেনদেন ত্রুটিতে শেষ হওয়ার পরিবর্তে আপনি ব্লকগুলির সাথে ত্রুটিগুলি ফাঁদে ফেলতে এবং পরিচালনা করতে পারেন
- জটিল শর্তসাপেক্ষ যুক্তি যা
CASE ... WHEN
খুব ভাল মানায় না
- গণনা করা মানগুলির প্রচুর পুনরায় ব্যবহার যা আপনি
WITH
সিটিইতে ফিট করতে পারবেন না
- গতিশীল রেকর্ড বিল্ডিং
- ফলাফল সেট উত্পাদন করার পরে আপনাকে একটি ক্রিয়া সম্পাদন করতে হবে
সাধারণ টেবিল এক্সপ্রেশন (সিটিই) এর সাথে, বিশেষত লিখনযোগ্য সিটিই এবং WITH RECURSIVE
আমি দেখতে পাই যে আমি পিএল / পিজিএসকিউএল ব্যবহারের চেয়ে অনেক কম ব্যবহার করি কারণ এসকিউএল অনেক বেশি অভিব্যক্তিপূর্ণ এবং শক্তিশালী। আমি এখন অনেক বেশি ভিউ এবং প্লেইন এসকিউএল ফাংশন ব্যবহার করি। এটি স্মরণে রাখার মতো যে প্লেইন এসকিউএল ফাংশনগুলিতে একাধিক বক্তব্য থাকতে পারে; শেষ বিবৃতিটি ফাংশনের ফলাফল।