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

Apa cara tercepat untuk memotong cap waktu menjadi 5 menit di Postgres?

Aku bertanya-tanya hal yang sama. Saya menemukan dua cara alternatif untuk melakukan ini, tetapi yang Anda sarankan lebih cepat.

Saya secara informal membandingkan salah satu tabel kami yang lebih besar. Saya membatasi kueri ke 4 juta baris pertama. Saya berganti-ganti antara dua kueri untuk menghindari memberikan satu keuntungan yang tidak adil karena caching db.

Melalui epoch/waktu unix

SELECT to_timestamp(
    floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min'))
    * EXTRACT(epoch FROM interval '5 min')
) FROM huge_table AS ht LIMIT 4000000

(Perhatikan ini menghasilkan timestamptz bahkan jika Anda menggunakan tipe data yang tidak diketahui zona waktu)

Hasil

  • Jalankan 1 :39,368 detik
  • Jalankan 3 :39,526 detik
  • Lari 5 :39,883 detik

Menggunakan date_trunc dan date_part

SELECT 
    date_trunc('hour', ht.time) 
    + date_part('minute', ht.time)::int / 5 * interval '5 min'
FROM huge_table AS ht LIMIT 4000000

Hasil

  • Jalankan 2 :34.189 detik
  • Jalankan 4 :37,028 detik
  • Jalankan 6 :32,397 detik

Sistem

  • Versi DB:PostgreSQL 9.6.2 pada x86_64-pc-linux-gnu, dikompilasi oleh gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit
  • Inti:Intel® Xeon®, E5-1650v2, Hexa-Core
  • RAM:64 GB, RAM DDR3 ECC

Kesimpulan

Versi Anda tampaknya lebih cepat. Tetapi tidak cukup cepat untuk kasus penggunaan khusus saya. Keuntungan tidak harus menentukan jam membuat versi Epoch lebih fleksibel dan menghasilkan parameterisasi yang lebih sederhana dalam kode sisi klien. Ini menangani 2 hour interval serta 5 minute interval tanpa harus menabrak date_trunc argumen unit waktu ke atas. Sebagai catatan akhir, saya berharap argumen satuan waktu ini diubah menjadi argumen interval waktu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana terhubung dengan Host PostgreSQL dari mesin virtualbox gelandangan

  2. EXECUTE...USING pernyataan di PL/pgSQL tidak bekerja dengan tipe record?

  3. Postgresql SQL GROUP BY interval waktu dengan akurasi sewenang-wenang (hingga mili detik)

  4. Bagaimana cara mengetahui partisi mana yang akan digunakan dalam partisi hash Postgres?

  5. PostgreSQL:menjalankan hitungan baris untuk kueri 'menurut menit'