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

Pengindeksan SQL pada varchar

Tombol pada VARCHAR kolom bisa sangat panjang yang menghasilkan lebih sedikit catatan per halaman dan lebih mendalam (lebih banyak level di B-Tree ). Indeks yang lebih panjang juga meningkatkan rasio kehilangan cache.

Berapa banyak string dalam peta rata-rata untuk setiap bilangan bulat?

Jika jumlahnya relatif sedikit, Anda dapat membuat indeks hanya pada kolom integer dan PostgreSQL akan melakukan penyaringan halus pada catatan:

CREATE INDEX ix_mytable_assoc ON mytable (assoc);

SELECT  floatval
FROM    mytable
WHERE   assoc = givenint
        AND phrase = givenstring

Anda juga dapat mempertimbangkan untuk membuat indeks pada hash string:

CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));

SELECT  floatval
FROM    mytable
WHERE   DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
        AND phrase = givenstring -- who knows when do we get a collision?

Setiap hash hanya 16 byte, sehingga kunci indeks akan jauh lebih pendek sambil tetap mempertahankan selektivitas dengan hampir sempurna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa keamanan tingkat baris tidak diaktifkan untuk tampilan Postgres?

  2. PowerShell terhubung ke Postgres DB

  3. Python psycopg2 cursor.fetchall() mengembalikan daftar kosong tetapi cursor.rowcount> 1

  4. Mendeteksi baris dengan kombinasi angka yang sama di dua kolom pertama, dan memilih yang memiliki angka tertinggi di kolom ketiga

  5. Django + Psycopg2:InterfaceError:hanya protokol 3 yang didukung