MySQL優化之Schema設計
本文轉載自微信公眾號「小豬notebook」,作者鐘Ger。轉載本文請聯系小豬notebook公眾號。
參考文獻:《高性能MySQL(第三版)》
1. 更優化的數據類型
(1)選擇可以正確存儲數據的最小數據類型。 因為它們占用更少的磁盤、內存和CPU緩沖,且處理時需要的CPU周期也更少。
(2)簡單的數據類型。 因為簡單數據類型的操作通常需要更少的CPU周期。eg:整型比字符型更好;使用MySQL內建的類型如date、datetime、time等而不是字符串來存儲日期和時間;使用整型來存儲IP地址而非字符串。
(3)盡量避免NULL。通常情況下最好指定列為NOT NULL。因為若查詢中包含可以為NULL的列,對于MySQL對可為NULL列使用索引、索引統計和值比較都更復雜。
我們建表時選擇數據類型參考上圖的流程即可。
2. MySQL數據類型大致整理
我們開發中常用的MySQL數據類型整理如下:
在建表的過程中,我們可以根據不同數據類型的優缺點來進行選取,從而使得表的存儲空間與性能達到最優。
3. 一些簡單的設計原則
一些我們開發過程中值得借鑒的表設計原則總結:
- 避免過度設計,減少產生復雜查詢的schema、多列表的設計
- 使用小而簡單的合適數據類型,除非真實數據模型中有明確需要,否則盡可能避免使用null值,而應該給每個列設置一個默認0值
- 盡可能使用相同數據類型存儲相似或相關的值,尤其是關聯條件中使用的列
- 可變長字符串中盡可能按需設置字符串的長度
- 避免使用MySQL廢棄的特性,例如指定浮點數的精度、整數的顯示寬度等
- 希望每位Developer都能夠好好設計表,減少被公司的DBA吐槽的機會