MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

mempercepat pencarian teks wildcard

Perencana kueri PostgreSQL cerdas, tetapi bukan AI. Untuk membuatnya gunakan indeks pada ekspresi gunakan bentuk ekspresi yang sama persis dalam kueri.

Dengan indeks seperti ini:

CREATE INDEX t_a_lower_idx ON t (lower(substring(a, 1, 4)));

Atau lebih sederhana di PostgreSQL 9.1:

CREATE INDEX t_a_lower_idx ON t (lower(left(a, 4)));

Gunakan kueri ini:

SELECT * FROM t WHERE lower(left(a, 4)) = 'abcd';

Yang 100% secara fungsional setara dengan:

SELECT * FROM t WHERE lower(a) LIKE 'abcd%'

Atau:

SELECT * FROM t WHERE a ILIKE 'abcd%'

Tapi tidak :

SELECT * FROM t WHERE a LIKE 'abcd%'

Ini adalah kueri yang berbeda secara fungsional dan Anda membutuhkan berbeda indeks:

CREATE INDEX t_a_idx ON t (substring(a, 1, 4));

Atau lebih sederhana dengan PostgreSQL 9.1:

CREATE INDEX t_a_idx ON t (left(a, 4));

Dan gunakan kueri ini:

SELECT * FROM t WHERE left(a, 4) = 'abcd';

Istilah penelusuran berlabuh kiri dengan panjang variabel

Tidak peka huruf besar/kecil. Indeks:

Sunting :Hampir lupa:Jika Anda menjalankan db dengan lokal selain 'C' default, Anda perlu menentukan kelas operator secara eksplisit - text_pattern_ops dalam contoh saya:

CREATE INDEX t_a_lower_idx
ON t (lower(left(a, <insert_max_length>)) text_pattern_ops);

Pertanyaan:

SELECT * FROM t WHERE lower(left(a, <insert_max_length>)) ~~ 'abcdef%';

Dapat memanfaatkan indeks dan hampir secepat varian dengan panjang tetap.

Anda mungkin tertarik dengan postingan di dba.SE dengan detail selengkapnya tentang pencocokan pola , terutama bagian terakhir tentang operator ~>=~ dan ~<~ .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mendapatkan kembali ruang yang dihapus tanpa `db.repairDatabase()`?

  2. Masalah MongoDB PHP UTF-8

  3. buat objek induk yang menyarangkan anak-anak di luwak

  4. Bidang tidak dikenal:kesalahan 'ntorreturn' di documenDB

  5. Peringatan:Mengakses properti 'MongoError' yang tidak ada dari ekspor modul di dalam dependensi melingkar