PostgreSQL DBA(98) - PG 12 Faster float conversion to text

husthxd 發表於 2019-09-26

PostgreSQL 12之前的版本浮點數是通過四捨五入到特定的數字來輸出的,由引數extra_float_digits控制。這種方法對於查詢有實數列或雙精度列的大表時的輸出速度較慢。在PG12中,十進位制表示輸出是作為精確的原始二進位制值重新輸入的最短輸出。

PG 11

testdb=# SET extra_float_digits = 3;
SET
Time: 1.141 ms
testdb=#  select 0.03::float;
        float8         
-----------------------
 0.0299999999999999989
(1 row)
Time: 3.116 ms
testdb=#

計算除不盡的小數,輸出也不同

testdb=# select 1/3::float;
       ?column?       
----------------------
 0.333333333333333315
(1 row)
Time: 2.022 ms
testdb=#

PG 12
select 0.03::float;

[local]:5432 [email protected]testdb=# SET extra_float_digits = 3;
SET
Time: 0.646 ms
[local]:5432 [email protected]=# select 0.03::float;
 float8 
--------
   0.03
(1 row)
Time: 0.611 ms
[local]:5432 [email protected]=#

select 1/3::float;

[local]:5432 [email protected]=# select 1/3::float;
      ?column?      
--------------------
 0.3333333333333333
(1 row)
Time: 1.986 ms
[local]:5432 [email protected]=#

參考文件
PostgreSQL 12: A Few Special-Case Performance Enhancements

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2658331/,如需轉載,請註明出處,否則將追究法律責任。