mysql性能優化之基礎數據類型優化(一)

本系列文章參考書籍《高性能MySQL》
阿里java開發規範
背景:初入java的殿堂已經一年多了,算是成爲了一位初級開發工程師吧,然而成爲中高級開發工程師甚至架構師,仍然需要不斷的學習和進步才行。今年暫定目標是,性能優化,做閱讀源碼的準備,閱讀部分spring源碼,學習jvm並實踐,對權限認證框架進行項目實踐,分享學習和工作中的心得。
詳細的各種概念就不敘述了,直接上手能用的。
基礎數據類型優化:
數據類型優化常用於建表之初
一):
1)儘量明確字段的數據類。比如: 日期,整數等要明確其數據類型,不能都賦予字符串類型。
2)經常作爲條件查詢的字段儘量不要使用null,可以設置默認值。
比如:在sql語句中作爲查詢的條件字段 "where apple_num > 50 " apple_num是數據庫的一個字段,初始化時若沒有明確數量可以設置默認爲0
理由: null的列被索引時,每個索引記錄需要一個額外的字節。
其他: 建立字段的時候儘量將null設置爲not null
二):
具體常用數據類型優化:
1.整數類型
mysql常見: TINYINT, SMALLINT, MEDINUMINT, ,INT,BIGNINT,分別使用8,16,24,32,64位存儲空間.
1個字節(1byte)= 8位
存儲的範圍是 -2^(N-1)
到2^(N-1)-1, N是位數.
整數類型的字段儘量選取合適的,如果是非負數,使用
unsigned修飾的。

在這裏插入圖片描述
2.實數類型
實數是帶有小數部分的數字,比如:double,float,decimal
,儘量使用decimal,因爲其他兩個可能有精度遺失。
3.字符串類型
字符串類型主要分爲
varchar和char。varchar是可變的字符串類型0~4294967295,char是定長的,長度範圍0-255,最大長度255,比如: char(10) 和varchar(10),定義都定義字對應符串長度是10, 這個長度即是字節。長度是10個字節。現在char(10) 和varchar(10)都存儲一個長度爲3的字符串,則char(10)對應的長度仍然是10,而後者是3。可以發現varcahr(10)對應存儲的長度是經過計算的,由10->3所以,這個步驟是需要花費時間計算的。
如: ID,標識符等,儘量都使用char這種長度是明確的,不會超過。
只知道大概範圍長度時,使用varchar儘量分配真正需要的空間,如一個備註改該範圍是200-300,可以定義爲varchar(300),但是儘量不要定義爲varchar(500)。
varchar長度不要超過 5000,如果存儲長
度大於此值,定義字段類型爲 text,獨立出來一張表,用主鍵來對應,避免影響其它字段索
引效率。
4.日期和時間類型
常見datetime,timestamp。
datetime不受時區影響, 對於timestamp,它把客戶端插入的時間從當前時區轉化爲UTC(世界標準時間)進行存儲。查詢時,將其又轉化爲客戶端當前時區進行返回(中國屬於東八區,所以應該是UTC+8)。而對於datetime,不做任何改變,基本上是原樣輸入和輸出。
推薦使用的timestamp,他比datetime空間效率更高,且默認字段時是當前時間,不會造成null的情況。 如有不足之處,歡迎指正。