熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

高性能MySQL:實數類型

2013-11-23 21:09:50  來源: MySQL 

   實數類型

  實數是帶有小數部分的數字然而 它們不只是為了存儲小數部分也可以使用DECIMAL 存儲比BIGINT 還大的整數MySQL 既支持精確類型也支持不精確類型

  FLOAT 和DOUBLE 類型支持使用標准的浮點運算進行近似計算如果需要知道浮點運算是怎麼計算的則需要研究所使用的平台的浮點數的具體實現

  DECIMAL 類型用於存儲精確的小數在MySQL 和更高版本DECIMAL 類型支持精確計算MySQL 以及更早版本則使用浮點運算來實現DECIAML 的計算這樣做會因為精度損失導致一些奇怪的結果在這些版本的MySQL 中DECIMAL 只是一個存儲類型因為CPU 不支持對DECIMAL 的直接計算所以在MySQL 以及更高版本中MySQL服務器自身實現了DECIMAL 的高精度計算相對而言CPU 直接支持原生浮點計算所以浮點運算明顯更快

  浮點和DECIMAL 類型都可以指定精度對於DECIMAL 列可以指定小數點前後所允許的最大位數這會影響列的空間消耗MySQL 和更高版本將數字打包保存到一個二進制字符串中(每 個字節存 個數字)例如DECIMAL() 小數點兩邊將各存儲 個數字一共使用 個字節小數點前的數字用 個字節小數點後的數字用 個字節小數點本身占 個字節

  MySQL 和更高版本中的DECIMAL 類型允許最多 個數字而早期的MySQL 版本中這個限制是 個數字並且保存為未壓縮的字符串(每個數字一個字節)然而這些(早期)版本實際上並不能在計算中使用這麼大的數字因為DECIMAL 只是一種存儲格式在計算中DECIMAL 會轉換為DOUBLE 類型

  有多種方法可以指定浮點列所需要的精度這會使得MySQL 悄悄選擇不同的數據類型或者在存儲時對值進行取捨這些精度定義是非標准的所以我們建議只指定數據類型不指定精度

  浮點類型在存儲同樣范圍的值時通常比DECIMAL 使用更少的空間FLOAT 使用 個字節存儲DOUBLE 占用 個字節相比FLOAT 有更高的精度和更大的范圍和整數類型一樣能選擇的只是存儲類型MySQL 使用DOUBLE 作為內部浮點計算的類型

  因為需要額外的空間和計算開銷所以應該盡量只在對小數進行精確計算時才使用DECIMAL例如存儲財務數據但在數據量比較大的時候可以考慮使用BIGINT 代替DECIMAL將需要存儲的貨幣單位根據小數的位數乘以相應的倍數即可假設要存儲財務數據精確到萬分之一分則可以把所有金額乘以一百萬然後將結果存儲在BIGINT 裡這樣可以同時避免浮點存儲計算不精確和DECIMAL 精確計算代價高的問題

       返回目錄高性能MySQL

       編輯推薦

       ASPNET MVC 框架揭秘

       Oracle索引技術

       ASP NET開發培訓視頻教程

  數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/MySQL/201311/29688.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.