程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 高性能MySql-Schema與數據類型優化1

高性能MySql-Schema與數據類型優化1

編輯:MYSQL入門知識

高性能MySql閱讀筆記第四章--Schema與數據類型優化閱讀筆記

良好的邏輯設計和物理設計是高性能的基石,應該根據系統將要執行的查詢語句來設計schema,這往往需要權衡各種因素。

本章主要為接下來的索引優化與查詢優化做鋪墊,覆蓋了MySql特有的schem設計方面的主題:

一.選擇優化的數據類型

  Mysql支持的數據類型非常多,選擇正確的數據類型對於獲得高性能至關重要。在為列選擇數據類型時,第一步需要確定合適的大類型,下一步是選擇具體類型相同大類型下的不同子類型數據有時也有一些特殊的行為和屬性。

  1.更小的數據類型通常更好

  2.簡單就好

  3.盡量避免NULL

二.整數類型

可以使用的幾種整數類型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT分別使用8,16,24,32,64位存儲空間。

整數類型有可選的UNSIGNED屬性,表示不允許負值,這大致可以使正數的上限提高一倍。

整數計算一般使用64位的BIGINT整數,即使32位環境也是如此(一些聚合函數是例外,他們使用DECIMAL或DOUBLE進行計算)。

三.實數類型

FLOAT和DOUBLE類型支持使用標准的浮點運算進行近似計算。DECIMAL類型用於存儲精確的小數,Mysql服務器自身實現了DECIMAL的高精度計算,相對而言,CPU直接支持原生浮點計算,所以浮點計算明顯更快。

浮點和DECIMAL類型都可以指定精度,對於DECIMAL可以指定小數點前後所允許的最大位數,這會影響列的空間消耗。

浮點類型在存儲同樣范圍的值時,通常比DECIMAL使用更少的空間,所以應該盡量只在對小數進行精確計算時才使用。

四.字符串類型

VARCHAR和CHAR是兩種最主要的字符串類型。

VARCHAR類型存儲可變長字符串,他比定長類型更節省空間,VARCHAR節省了存儲空間,所以對性能也有幫助,但由於是變長的,在UPDATE時可能使行變得比原來長,這就導致需要做額外的工作。

CHAR是定長的,適合存儲很短的字符串(末尾會用空格填充)。

五.BLOB和TEXT類型

Mysql把每個BLOB和TEXT值當作一個獨立的對象處理。

六.使用枚舉(ENUM)代替字符串類型

有時候可以使用枚舉代替常用的字符串類型,枚舉把一些不重復的字符串存儲成一個預定義的集合。枚舉在保存時是(數字-字符串)的形式。

七.日期和時間類型

Mysql使用許多類型保存日期和時間值,例如year和date,Mysql能存儲的最小時間粒度為秒,Mysql提供兩種相似的日期類型:DATETIME和TIMESTAMP,在某些場合一個比另一個工作的更好。

DATETIME

這個類型保存的最大值從1001到9999年,精度為秒。

TIMESTAMP使用4個字節保持日期,默認NOT NULL。

八.位數據類型

BIT 最大長度64個位。Mysql把BIT當作字符串類型,而不是數字類型。

SET 一系列打包位的集合。Mysql有像FIND_IN_SET和FIELD這樣的函數,方便在查詢中使用。他的主要缺點是改變列的代價太高,也無法在SET上通過索引查找。

九.選擇標識符。通常為整數類型和字符串。

十.特殊類型數據,例如毫秒級時間,IP地址,可以在使用時進行相應轉換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved