深入淺出MySQL 第八章 選擇合適的數據類 筆記

第八章 選擇合適的數據類型

CHAR與VARCHAR

CHAR:

  • 固定長度,處理速度快
  • 浪費空間
  • 需要對行尾空格進行處理

應用場景:長度變化不大並且對查詢速度有較高要求的數據

不同引擎下的選擇

  • MyISAM 存儲引擎:建議使用CHAR
  • MEMORY 存儲引擎:皆可。兩者都是作爲 CHAR 類型處理
  • InnoDB 存儲引擎:建議使用 VARCHAR

TEXT與BLOB

注意:在執行了大量的刪除操作時,刪除操作會在數據表中留下很大的“空洞”。爲了提高性能,建議定期使用 OPTIMIZE TABLE 功能對這類表進行碎片整理,避免因爲“空洞”導致性能問題。

  • 可以使用合成的(Synthetic)索引來提高大文本字段(BLOB 或TEXT)的查詢性能。合成索引就是根據大文本字段的內容建立一個散列值,並把這個值存儲在單獨的數據列中,接下來就可以通過檢索散列值找到數據行了。但是,要注意這種技術只能用於精確匹配的查詢
  • 在不必要的時候避免檢索大型的 BLOB 或 TEXT 值。避免“SELECT *”的出現
  • 把 BLOB 或 TEXT 列分離到單獨的表中。

浮點數與定點數

區別:

  • 當一個字段被定義爲浮點類型後,如果插入數據的精度超過該列定義的實際精度,則插入值會被四捨五入到實際定義的精度值,然後插入,四捨五入的過程不會報錯
  • 定點數是以字符串形式存放的,可以更加精確的保存數據。如果實際插入的數值精度大於實際定義的精度,則 MySQL 會進行警告

原則:

  • 浮點數存在誤差問題
  • 對貨幣等對精度敏感的數據,應該用定點數表示或存儲
  • 在編程中,如果用到浮點數,要特別注意誤差問題,並儘量避免做浮點數比較
  • 要注意浮點數中一些特殊值的處理

日期類型選擇

  • 根據實際需要選擇能夠滿足應用的最小存儲的日期類型
  • 如果要記錄年月日時分秒,並且記錄的年份比較久遠,那麼最好使用 DATETIME
  • 如果記錄的日期需要讓不同時區的用戶使用,那麼最好使用 TIMESTAMP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章