MySQL資料型別和Schema優化(二)

2021-10-07 20:21:37 字數 1378 閱讀 9229

schema設計

快取表和彙總表

良好的邏輯設計與物理設計是高效能的基石,應該根據具體業務需求的查詢語句來設計schema,這往往需要權衡各種因素。

比如,反正規化的設計可能會增加某些查詢的速度,但也會帶來資料同步的維護工作。

mysql支援的資料型別非常多,選擇合適的資料型別將有助於mysql的效能提公升。

一般遵循以下規則:

更小的資料型別

簡單的資料型別

盡量避免null

更小的資料型別,意味著占用更小的磁碟、記憶體、cpu快取等,當然乙個比較重要的前提是對型別要有合理的預估,畢竟對型別的變更是一項痛苦的事情,alter table操作會鎖住整個表。

簡單的資料型別,意味著mysql更少的處理,占用更少的cpu週期,比如整型比字串操作代價更低,字串需要處理字符集和校對規則(排序規則),使得字串的處理更加複雜。

盡量避免null,如果沒有指定列是否為null,mysql預設設定列為null。一般可以的話推薦設定not null,因為使用null對於mysql更難優化。當為null的列被索引時,每個索引記錄需要乙個額外的位元組。

注意:timesamp時區問題,可能會導致cpu耗盡。前提是設定time_zone=system,該設定會獲取系統的時區配置,並且獲取操作是全域性鎖,高併發的情況下會導致cpu耗盡。

tinyint、smallint、mediumint、int、bigint

department

employee

leadera小明

王總a小李王總

當需要修改部門領導時,需要更新兩條資料,如果遵循正規化化,再新增乙個部門和領導的實體表,則只需要更新一條資料即可

同時可以避免一些group by,distinct等操作,比如上面案例需要統計所有部門,就需要通過group by操作。

正規化化的缺點是需要多表關聯,稍微複雜一點可能就需要關聯才能查詢,此時可能會通過一些反正規化的手段,減少關聯查詢。常用的做法就是在另乙個表,儲存相同的列。

通常設計是混用模式:正規化+反正規化配合使用

快取表和彙總表沒有標準的定義,通常來說快取表來表示儲存那些可以比較簡單地從其他表schema獲取(但是每次獲取比較慢),可以通過快取冗餘資料,避免從其他表查詢。

彙總表可以優先計算出結果,直接使用簡單方式進行查詢,減少實時查詢計算的效能問題。

mysql資料型別用法 mysql資料型別和用法

歡迎進入linux社群論壇,與200萬技術人員互動交流 進入 mysql支援多種列型別 數值型別 日期 時間型別和字串 字元 型別。本章首先對這些列型別進行了概述,然後更加詳細地描述了各種列的型別,以及列型別儲存需求的總結。概述很簡單。關於具體列型別 歡迎進入linux社群論壇,與200萬技術人員互...

mysql 資料型別 真假 MySQL 資料型別

mysql基礎 資料型別 整型型別 根據所儲存的整數數值取值範圍不同,可分為以下五類 1 tinyint佔1個位元組 2 smallint佔2個位元組 3 mediumint 佔3個位元組 4 int佔4個位元組 5 bigint佔8個位元組 根據每種型別所佔的位元組數可確定其無符號整數和有符號整數...

mysql 郵箱 資料型別 mysql 資料型別

1 整型mysql資料型別含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 21474836...