Pendekatan yang paling umum adalah untuk huruf kecil atau huruf besar string pencarian dan data. Tapi ada dua masalah dengan itu.
- Ini bekerja dalam bahasa Inggris, tetapi tidak dalam semua bahasa. (Mungkin bahkan tidak di sebagian besar bahasa.) Tidak setiap huruf kecil memiliki huruf besar yang sesuai; tidak setiap huruf besar memiliki huruf kecil yang sesuai.
- Menggunakan fungsi seperti lower () dan upper () akan memberi Anda pemindaian berurutan. Itu tidak bisa menggunakan indeks. Pada sistem pengujian saya, menggunakan lebih rendah () memakan waktu sekitar 2000 kali lebih lama daripada kueri yang dapat menggunakan indeks. (Data uji memiliki sedikit lebih dari 100 ribu baris.)
Setidaknya ada tiga solusi yang jarang digunakan yang mungkin lebih efektif.
- Gunakan modul citext , yang sebagian besar meniru perilaku tipe data case-insensitive. Setelah memuat modul itu, Anda dapat membuat indeks case-insensitive oleh
CREATE INDEX ON groups (name::citext);
. (Tapi lihat di bawah.)
- Gunakan susunan case-insensitive. Ini diatur ketika Anda menginisialisasi database. Menggunakan susunan case-insensitive berarti Anda dapat menerima hampir semua format dari kode klien, dan Anda masih akan memberikan hasil yang bermanfaat. (Ini juga berarti Anda tidak dapat melakukan permintaan huruf besar-kecil. Duh.)
- Buat indeks fungsional. Buat indeks huruf kecil dengan menggunakan
CREATE
INDEX ON groups (LOWER(name));
. Setelah melakukannya, Anda dapat mengambil keuntungan dari indeks dengan pertanyaan seperti SELECT id FROM groups WHERE LOWER(name) = LOWER('ADMINISTRATOR');
, atau SELECT id FROM groups WHERE LOWER(name) = 'administrator';
Anda harus ingat untuk menggunakan RENDAH ().
Modul citext tidak memberikan tipe data case-insensitive yang sebenarnya. Sebaliknya, ia berperilaku seolah-olah setiap string lebih kecil. Artinya, berperilaku seolah-olah Anda telah memanggil lower()
setiap string, seperti pada angka 3 di atas. Keuntungannya adalah bahwa programmer tidak perlu mengingat string huruf kecil. Tetapi Anda perlu membaca bagian "Perilaku Perbandingan String" dan "Keterbatasan" dalam dokumen sebelum Anda memutuskan untuk menggunakan citext.