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

Prioritas berdasarkan waktu dalam Permintaan Rekaman Aktif

Tidak seperti beberapa database lain (seperti Oracle) PostgreSQL memiliki boolean yang berfungsi penuh Tipe. Anda dapat menggunakannya langsung dalam ORDER BY klausa tanpa menerapkan CASE pernyataan - itu bagus untuk situasi yang lebih kompleks.

Urutkan urutan untuk boolean nilainya adalah:

FALSE -> TRUE -> NULL

Jika Anda ORDER BY bool_expression DESC , Anda membalikkan urutannya menjadi:

NULL -> TRUE -> FALSE

Jika Anda ingin TRUE pertama dan NULL terakhir, gunakan NULLS LAST klausa ORDER BY :

ORDER BY (featured AND created_at > now() - interval '11 days') DESC NULLS LAST  
       , created_at DESC

Tentu saja, NULLS LAST hanya relevan jika featured atau created_at bisa menjadi NULL . Jika kolom didefinisikan NOT NULL , maka jangan repot-repot.

Juga, FALSE akan diurutkan sebelum NULL . Jika Anda tidak ingin membedakan antara keduanya, Anda dapat kembali ke CASE pernyataan, atau Anda dapat memasukkan NULLIF() atau COALESCE() .

ORDER BY NULLIF(featured AND created_at > now() - interval '11 days'), FALSE)
                                                                DESC NULLS LAST
       , created_at DESC

Kinerja

Perhatikan, bagaimana saya menggunakan:

created_at > now() - interval '11 days'

dan tidak :

now() - created_at < interval '11 days'

Pada contoh pertama, ekspresi ke kanan adalah konstanta yang dihitung sekali . Kemudian indeks dapat digunakan untuk mencari baris yang cocok. Sangat efisien.

Yang terakhir biasanya tidak dapat digunakan dengan indeks. Nilai harus dihitung untuk setiap baris, sebelum dapat diperiksa terhadap ekspresi konstan di sebelah kanan. Jangan lakukan ini jika Anda bisa menghindarinya. Pernah!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah nama kolom PostgreSQL peka huruf besar/kecil?

  2. Bagaimana cara mendapatkan kunci utama tabel dari Postgres melalui plpgsql?

  3. Bagaimana cara mengikat variabel SQL di PHP?

  4. Bagaimana cara memilih lebih dari 1 catatan per hari?

  5. Optimasi Kueri di PostgreSQL. JELASKAN Dasar-dasar – Bagian 3