PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có một lần truy cập hiệu suất sử dụng các kiểu dữ liệu thập phân (MySQL / Postgres)

Pavel nói khá đúng, tôi chỉ muốn giải thích một chút.

Giả sử rằng ý của bạn là tác động đến hiệu suất so với dấu phẩy động hoặc số nguyên bù điểm cố định (tức là lưu trữ hàng nghìn cent dưới dạng số nguyên):Có, có rất nhiều tác động đến hiệu suất. PostgreSQL và theo âm thanh của mọi thứ MySQL, lưu trữ DECIMAL / NUMERIC ở dạng thập phân được mã hóa nhị phân. Định dạng này nhỏ gọn hơn so với việc lưu trữ các chữ số dưới dạng văn bản, nhưng nó vẫn không hiệu quả để làm việc với.

Nếu bạn không thực hiện nhiều phép tính trong cơ sở dữ liệu, tác động được giới hạn ở không gian lưu trữ lớn hơn được yêu cầu cho BCD so với số nguyên hoặc dấu phẩy động, và do đó các hàng rộng hơn và quét chậm hơn, chỉ mục lớn hơn, v.v. Các phép toán so sánh trong b -tree tìm kiếm chỉ mục cũng chậm hơn, nhưng không đủ quan trọng trừ khi bạn đã bị ràng buộc bởi CPU vì một số lý do khác.

Nếu bạn đang thực hiện nhiều phép tính với DECIMAL / NUMERIC giá trị trong cơ sở dữ liệu, thì hiệu suất thực sự có thể bị ảnh hưởng. Điều này đặc biệt đáng chú ý, ít nhất là trong PostgreSQL, vì Pg không thể sử dụng nhiều hơn một CPU cho bất kỳ truy vấn nhất định nào. Nếu bạn đang thực hiện một loạt các phép chia và phép nhân, các phép toán phức tạp hơn, tổng hợp, v.v. trên các số, bạn có thể bắt đầu thấy mình bị ràng buộc bởi CPU trong các tình huống mà bạn sẽ không bao giờ gặp phải khi sử dụng kiểu dữ liệu float hoặc integer. Điều này đặc biệt đáng chú ý trong khối lượng công việc giống OLAP (phân tích) và trong báo cáo hoặc chuyển đổi dữ liệu trong quá trình tải hoặc trích xuất (ETL).

Mặc dù thực tế là có tác động đến hiệu suất (thay đổi dựa trên khối lượng công việc từ không đáng kể đến khá lớn), bạn thường nên sử dụng numeric / decimal khi đó là loại thích hợp nhất cho tác vụ của bạn - tức là khi các giá trị phạm vi rất cao phải được lưu trữ và / hoặc lỗi làm tròn không được chấp nhận.

Đôi khi, việc sử dụng bigint và điểm bù điểm cố định cũng đáng gặp phải rắc rối, nhưng điều đó rất vụng về và không linh hoạt. Thay vào đó, sử dụng dấu phẩy động hiếm khi là câu trả lời đúng do tất cả những thách thức khi làm việc một cách đáng tin cậy với các giá trị dấu phẩy động cho những thứ như tiền tệ.

(BTW, tôi khá vui mừng khi một số CPU Intel mới và dòng CPU Power 7 của IBM, bao gồm hỗ trợ phần cứng cho dấu phẩy động thập phân IEEE 754. Nếu điều này có sẵn trong các CPU cấp thấp hơn thì đây sẽ là một chiến thắng lớn cho cơ sở dữ liệu .)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động hóa các công việc hàng ngày của PostgreSQL bằng Jenkins

  2. Nhận giá trị nối tiếp mặc định sau khi INSERT bên trong PL / pgSQL

  3. SQLAlchemy, Psycopg2 và Postgresql COPY

  4. Lấy số tuần từ một ngày trong PostgreSQL

  5. Truy vấn cập nhật đơn giản chậm trên cơ sở dữ liệu PostgreSQL với 3 triệu hàng