সর্বাধিক প্রচলিত পদ্ধতি হ'ল অনুসন্ধান স্ট্রিং এবং ডেটা হয় ছোট হাতের বা বড় হাতের অক্ষর। তবে তা নিয়ে দুটি সমস্যা রয়েছে।
- এটি ইংরেজিতে কাজ করে তবে সমস্ত ভাষায় নয়। (বেশিরভাগ ভাষায়ও হতে পারে না)) প্রতিটি ছোট হাতের অক্ষরের সাথে একটি বড় বড় অক্ষর থাকে না; প্রতিটি বড় হাতের অক্ষরের সাথে একটি ছোট ছোট অক্ষর থাকে না।
- লোয়ার () এবং উপরের () এর মতো ফাংশন ব্যবহার করা আপনাকে একটি ক্রমিক স্ক্যান দেয়। এটি সূচকগুলি ব্যবহার করতে পারে না। আমার পরীক্ষার সিস্টেমে, নিম্ন () ব্যবহার করা কোনও সূচক ব্যবহার করতে পারে এমন প্রশ্নের চেয়ে 2000 গুণ বেশি সময় নেয় use (পরীক্ষার ডেটাতে 100k এর বেশি সারি রয়েছে))
কমপক্ষে তিনটি কম ঘন ঘন ব্যবহৃত সমাধান রয়েছে যা আরও কার্যকর হতে পারে।
- সাইটেক্সট মডিউলটি ব্যবহার করুন , যা বেশিরভাগ ক্ষেত্রে ক্ষেত্রে-সংবেদনশীল ডেটা ধরণের আচরণ অনুকরণ করে। সেই মডিউলটি লোড করে, আপনি কেস-সংবেদনশীল সূচক তৈরি করতে পারেন
CREATE INDEX ON groups (name::citext);
। (তবে নীচে দেখুন।)
- কেস-সংবেদনশীল কোলেশন ব্যবহার করুন। আপনি কোনও ডাটাবেস সূচনা করার সময় এটি সেট করা হয়। কেস-সংবেদনশীল কোলেশন ব্যবহার করার অর্থ আপনি ক্লায়েন্ট কোড থেকে যে কোনও বিন্যাস সম্পর্কে মেনে নিতে পারেন এবং আপনি এখনও কার্যকর ফলাফলগুলি ফিরিয়ে আনতে পারেন। (এর অর্থ হ'ল আপনি কেস-সংবেদনশীল প্রশ্নগুলি করতে পারবেন না Du ডু।)
- একটি কার্যকরী সূচক তৈরি করুন। ব্যবহার করে একটি ছোট হাতের সূচক তৈরি করুন
CREATE
INDEX ON groups (LOWER(name));
। কাজ রয়ে, আপনি সূচক সুবিধা গ্রহণ করতে পারেন প্রশ্নের মতো SELECT id FROM groups WHERE LOWER(name) = LOWER('ADMINISTRATOR');
, অথবা SELECT id FROM groups WHERE LOWER(name) = 'administrator';
যা শুরু করেছো স্মরণ যদিও, নিম্ন () ব্যবহার করতে।
সাইটেক্সট মডিউলটি সত্যিকারের কেস-সংবেদনশীল ডেটা প্রকার সরবরাহ করে না। পরিবর্তে, এটি এমন আচরণ করে যে প্রতিটি স্ট্রিংকে নিম্নতর করা হয়েছে। এটি, এটি এমন আচরণ করে যে আপনি lower()
উপরের 3 নম্বরের মতো প্রতিটি স্ট্রিংয়ে ডেকেছেন । সুবিধাটি হ'ল প্রোগ্রামারদের ছোট স্ট্রিংগুলি মনে রাখতে হবে না। তবে আপনাকে সাইটেক্সট ব্যবহার করার সিদ্ধান্ত নেওয়ার আগে ডক্সে আপনার "স্ট্রিং তুলনা আচরণ" এবং "সীমাবদ্ধতা" বিভাগগুলি পড়তে হবে।