PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

LIKE LEBIH RENDAH vs iLIKE

Jawabannya tergantung pada banyak faktor seperti versi Postgres, encoding dan lokal - LC_COLLATE khususnya.

Ekspresi telanjang lower(description) LIKE '%abc%' biasanya sedikit lebih cepat dari description ILIKE '%abc%' , dan keduanya sedikit lebih cepat daripada ekspresi reguler yang setara:description ~* 'abc' . Ini penting untuk pemindaian berurutan di mana ekspresi harus dievaluasi untuk setiap baris yang diuji.

Tapi untuk tabel besar seperti yang Anda tunjukkan dalam jawaban Anda, seseorang pasti akan menggunakan file index. Untuk pola arbitrer (tidak hanya berlabuh kiri) saya menyarankan indeks trigram menggunakan modul tambahan pg_trgm . Kemudian kita berbicara tentang milidetik, bukan detik, dan perbedaan antara ekspresi di atas dihilangkan.

Indeks GIN dan GiST (menggunakan gin_trgm_ops atau gist_trgm_ops kelas operator) mendukung ILIKE (~~ ), ILIKE (~~* ), ~ , ~* (dan beberapa varian lainnya) sama. Dengan indeks GIN trigram pada description (biasanya lebih besar dari GiST, tetapi lebih cepat untuk dibaca), kueri Anda akan menggunakan description ILIKE 'case_insensitive_pattern' .

Terkait:

  • Variasi kinerja kueri SEPERTI PostgreSQL
  • String UTF-8 serupa untuk bidang pelengkapan otomatis

Dasar-dasar untuk pencocokan pola di Postgres:

  • Pencocokan pola dengan LIKE, SIMILAR TO atau ekspresi reguler di PostgreSQL

Saat bekerja dengan indeks trigram tersebut biasanya lebih praktis untuk bekerja dengan:

description ILIKE '%abc%'

Atau dengan operator regexp peka huruf besar/kecil (tanpa % wildcard):

description ~* 'abc'

Indeks pada (description) tidak mendukung kueri di lower(description) seperti:

lower(description) LIKE '%abc%'

Dan sebaliknya.

Dengan predikat di lower(description) secara eksklusif , indeks ekspresi adalah opsi yang sedikit lebih baik.

Dalam semua kasus lain, indeks pada (description) lebih disukai karena mendukung keduanya predikat case-sensitive dan -insensitive.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres:tingkatkan pengguna menjadi pengguna super?

  2. Daftar kolom dengan indeks di PostgreSQL

  3. Basis Data PostgreSQL Saya Kehabisan Ruang Disk

  4. Cara menentukan tab di front-end COPY postgres

  5. Postgresql -bash:psql:perintah tidak ditemukan