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

Apakah ada hit kinerja menggunakan tipe data desimal (MySQL/Postgres)

Pavel benar, saya hanya ingin menjelaskan sedikit.

Dengan anggapan bahwa yang Anda maksud adalah dampak kinerja dibandingkan dengan floating point, atau bilangan bulat offset titik tetap (yaitu menyimpan seperseribu sen sebagai bilangan bulat):Ya, ada banyak dampak kinerja. PostgreSQL, dan dengan suara MySQL, simpan DECIMAL / NUMERIC dalam desimal berkode biner. Format ini lebih ringkas daripada menyimpan angka sebagai teks, tetapi masih tidak terlalu efisien untuk digunakan.

Jika Anda tidak melakukan banyak perhitungan dalam database, dampaknya terbatas pada ruang penyimpanan yang lebih besar yang diperlukan untuk BCD dibandingkan dengan integer atau floating point, dan dengan demikian baris yang lebih lebar dan pemindaian yang lebih lambat, indeks yang lebih besar, dll. Operasi perbandingan di b -tree index pencarian juga lebih lambat, tetapi tidak cukup berarti kecuali Anda sudah terikat dengan CPU karena alasan lain.

Jika Anda melakukan banyak perhitungan dengan DECIMAL / NUMERIC nilai-nilai dalam database, maka kinerja dapat benar-benar menderita. Ini terutama terlihat, setidaknya di PostgreSQL, karena Pg tidak dapat menggunakan lebih dari satu CPU untuk kueri apa pun. Jika Anda melakukan banyak pembagian &perkalian, matematika yang lebih kompleks, agregasi, dll pada numerik, Anda dapat mulai menemukan diri Anda terikat CPU dalam situasi di mana Anda tidak akan pernah menggunakan tipe data float atau integer. Hal ini terutama terlihat pada beban kerja seperti OLAP (analitik), dan dalam pelaporan atau transformasi data selama pemuatan atau ekstraksi (ETL).

Terlepas dari kenyataan bahwa ada dampak kinerja (yang bervariasi berdasarkan beban kerja dari yang dapat diabaikan hingga cukup besar), Anda biasanya harus menggunakan numeric / decimal ketika itu adalah jenis yang paling tepat untuk tugas Anda - yaitu ketika nilai rentang yang sangat tinggi harus disimpan dan/atau kesalahan pembulatan tidak dapat diterima.

Kadang-kadang perlu kerumitan menggunakan bigint dan offset titik tetap, tapi itu canggung dan tidak fleksibel. Menggunakan floating point sebagai gantinya sangat jarang menjadi jawaban yang tepat karena semua tantangan bekerja dengan andal dengan nilai floating point untuk hal-hal seperti mata uang.

(BTW, saya cukup senang bahwa beberapa CPU Intel baru, dan jajaran CPU Power 7 IBM, menyertakan dukungan perangkat keras untuk titik mengambang desimal IEEE 754. Jika ini tersedia di CPU kelas bawah, ini akan menjadi kemenangan besar untuk basis data .)



  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 ada hit kinerja menggunakan tipe data desimal (MySQL/Postgres)

  2. Bekerja menuju Postgres-XL 9.5

  3. Apakah ada PostgreSQL yang setara dengan profiler SQL Server?

  4. psql perintah tidak valid \N saat memulihkan sql

  5. heroku, postgreSQL, Django, comments, deliciouspie:Tidak ada operator yang cocok dengan nama dan tipe argumen yang diberikan. Anda mungkin perlu menambahkan gips tipe eksplisit