《高性能MYSQL》——Schema與數據類型優化

良好的邏輯設計和物理設計是高性能的基石,應該根據系統將要執行的查詢語句來設計schema。緩存

1、選擇優化的數據類型性能

選擇數據類型的原則優化

一、更小的一般更好spa

通常狀況下,應該儘可能使用能夠正確存儲數據的最小數據類型。更小的數據類型一般更快,由於它們佔用更小的磁盤、內存和CPU緩存,而且處理時須要的CPU週期也更少。設計

二、簡單就好排序

簡單數據類型的操做一般須要更少的CPU週期。索引

三、儘可能避免NULL內存

查詢中包含可爲NULL的列對MYSQL來講更難優化,由於可爲NULL的列使得索引、索引統計和值比較都更復雜。字符串

整數類型class

若是存儲整數,可使用這幾種整數類型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT分別使用8, 16, 24, 32, 64位存儲空間。整數類型有可選的UNSIGNED屬性,表示不容許負值,這大體可使正數的上限提升一倍。有符號和無符號類型使用相同的存儲空間,並具備相同的性能,所以能夠根據實際狀況 選擇合適的類型。

實數類型

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

FLOATDOUBLE類型支持使用標準的浮點運算進行近似計算。

DECIMAL類型用於存儲精確的小數。

浮點類型在存儲一樣範圍的值時,一般比DECIMAL使用更少的空間。FLOAT使用4個字 節存儲。DOUBLE佔用8個字節,相比FLOAT有更高的精度和更大的範圍。

字符串類型

VARCHARCHAR類型

VARCHARCHAR是兩種最主要的字符串類型。

VARCHAR類型用於存儲可變長字符串,是最多見的字符串數據類型。它比定長類型 更節省空間,由於它僅使用必要的空間(例如,越短的字符串使用越少的空間)。

CHAR類型是定長的:MySQL老是根據定義的字符串長度分配足夠的空間。CHAR適合存儲很短的字符串,或者全部值都接近同一個長度。

BLOBTEXT類型

BLOBTEXT都是爲存儲很大的數據而設計的字符串數據類型,分別採用二進制和字符方式存儲。

日期和時間類型

DATETIME

這個類型能保存大範圍的值,從1001年到9999年,精度爲秒。它把日期和時間封裝到格式爲YYYYMMDDHHMMSS的整數中與時區無關。使用8個字節的存儲空間。

TIMESTAMP

TIMETAMP類型保存了從197011日午夜(格林尼治標準時間)以來的秒數,它和UNIX時間戳相同。TIMESTAMP只使用4個字節的存儲空間。

2、範式與反範式

範式的優勢和缺點

優勢:

範式化的更新操做一般比反範式化要快。

當數據較好地範式化時,就只有不多或者沒有重複數據,因此只須要修改更少的數據。

範式化的表一般更小,能夠更好地放在內存裏,因此執行操做會更快。

缺點:

範式化設計的schema的缺點是一般須要關聯。稍微複雜一些的査詢語句在符合範式的 schema上均可能須要至少一次關聯,也許更多。

反範式的優勢和缺點

優勢:

反範式化的schema由於全部數據都在一張表中,能夠很好地避免關聯。

能夠設計有效的索引。

缺點:

表中的數據冗餘較多,刪除數據時候會形成表有些有用的信息丟失。

混用範式化和反範式化

事實是,徹底的範式化和徹底的反範式化schema都是實驗室裏纔有的東西:在真實 世界中不多會這麼極端地使用。在實際應用中常常須要混用,可能使用部分範式化的 schema緩存表,以及其餘技巧。

最多見的反範式化數據的方法是複製或者緩存,在不一樣的表中存儲相同的特定列。

3、緩存表和彙總表

存表表示存儲那些能夠比較簡單地從schema其餘表獲取(可是每次獲取的速度比較慢)數據的表(例如, 邏輯上冗餘的數據)。

彙總表表示那些使用GROUP BY語句聚合數據的表(例 如,數據不是邏輯上冗餘的)。

4、schema設計原則

  • 儘可能避免過分設計,例如會致使極其複雜査詢的schema設計,或者有不少列的表設 計(不少的意思是介於有點多和很是多之間)。
  • 使用小而簡單的合適數據類型,除非真實數據模型中有確切的須要,不然應該儘量地避免使用NULL值。
  • 儘可能使用相同的數據類型存儲類似或相關的值,尤爲是要在關聯條件中使用的列。
  • 注意可變長字符串,其在臨時表和排序時可能致使悲觀的按最大長度分配內存。
  • 儘可能使用整型定義標識列。
  • 避免使用MySQL已經遺棄的特性,例如指定浮點數的精度,或者整數的顯示寬度。
  • 當心使用ENUMSET雖然它們用起來很方便,可是不要濫用,不然有時候會變成 陷阱。最好避免使用BIT.
相關文章
相關標籤/搜索