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

Pemindaian indeks untuk perbandingan multikolom - pemesanan kolom indeks yang tidak seragam

PostgreSQL mengimplementasikan tupel dengan sangat teliti, (tidak seperti setengah implementasi yang ditemukan di Oracle, DB2, SQL Server, dll.). Anda dapat menulis kondisi Anda menggunakan "ketidaksamaan tupel", seperti pada:

select * 
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10

Harap dicatat bahwa karena kolom kedua dalam urutan menurun, Anda harus "membalikkan" nilainya selama perbandingan. Itu sebabnya dinyatakan sebagai -b dan juga, -20 . Ini bisa menjadi rumit untuk kolom non-numerik seperti tanggal, varchars, LOB, dll.

Akhirnya, penggunaan indeks masih dimungkinkan dengan -b nilai kolom jika Anda membuat indeks ad-hoc, seperti:

create index ix1 on table1 (a, (-b), c);

Namun, Anda tidak akan pernah bisa memaksa PostgreSQL untuk menggunakan file index. SQL adalah bahasa deklaratif, bukan bahasa imperatif. Anda dapat memikat itu untuk melakukannya dengan menjaga statistik tabel tetap up to date, dan juga dengan memilih sejumlah kecil baris. Jika LIMIT . Anda terlalu besar, PostgreSQL mungkin cenderung menggunakan pemindaian tabel penuh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kebuntuan postgres tanpa penguncian eksplisit

  2. Kontrol Versi PostgreSQL dengan Atlassian Bitbucket

  3. Secara efisien menanyakan tabel deret waktu yang besar untuk satu baris setiap 15 menit

  4. DENGARKAN/BERITAHU pgconnection turun java?

  5. Saya mencoba menyalin file, tetapi mendapatkan pesan kesalahan