應該盡量使用可以正確儲存資料的最小資料型別,更小的資料型別通常更快,因為它們占用更少的磁碟、記憶體和cpu快取,並且處理時需要的cpu週期更少,但是要確保沒有低估需要儲存的值的範圍,如果無法確認哪個資料型別,就選擇你認為不會超過範圍的最小型別。
簡單資料型別的操作通常需要更少的cpu週期,例如:
1、整型比字元操作代價更低,因為字符集和校對規則是字元比較比整型比較更複雜
2、使用mysql自建型別而不是字串來儲存日期和時間
3、用整型儲存ip位址(視情況而定吧,整型儲存確實可以減少空間,但是減少了閱讀性)
如果查詢中包含可為null的列,對mysql來說很難優化,因為可為null的列使得索引、索引統計和值比較都更加複雜。坦白來說,通常情況下null的列改為not null帶來的效能提公升比較小,所以沒有必要將所有的表的schema進行修改,但是應該盡量避免設計成可為null的列。
可以使用的幾種整數型別:tinyint,smallint,mediumint,int,bigint分別使用8,16,24,32,64位儲存空間。盡量使用滿足需求的最小資料型別。
1、char長度固定,即每條資料占用等長位元組空間;最大長度是255個字元,適合用在身份證號、手機號等定長字串
2、varchar可變長度,可以設定最大長度;最大空間是65535個位元組,適合用在長度可變的屬性
3、text不設定長度,當不知道屬性的最大長度時,適合用text
按照查詢速度:char>varchar>text
mysql 把每個 blob 和 text 值當作乙個獨立的物件處理。
兩者都是為了儲存很大資料而設計的字串型別,分別採用二進位制和字元方式儲存。
1、不要使用字串型別來儲存日期時間資料
2、日期時間型別通常比字串占用的儲存空間小
3、日期時間型別在進行查詢過濾時可以利用日期來進行比對
4、日期時間型別還有著豐富的處理函式,可以方便的對時間型別進行日期計算
5、使用int儲存日期時間不如使用timestamp型別
有時可以使用列舉類代替常用的字串型別,mysql儲存列舉型別會非常緊湊,會根據列表值的資料壓縮到乙個或兩個位元組中,mysql在內部會將每個值在列表中的位置儲存為整數,並且在表的.frm檔案中儲存「數字-字串」對映關係的查詢表,eg:
人們經常使用varchar(15)來儲存ip位址,然而,ip的本質是32位無符號整數不是字串,可以使用inet_aton()和inet_ntoa函式在這兩種表示方法之間轉換
案例:
select inet_aton('1.1.1.1')
select inet_ntoa(16843009)
mysql調優之schema優化
mysql的三正規化 1nf 第一正規化 字段不可分 2nf 第二正規化 有主鍵,非主鍵字段依賴主鍵 3nf 第三正規化 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 在企業中...
Mysql 優化 調優
一 慢查詢日誌 慢查詢日誌是在整個庫上做一定的慢執行sql抓取 1 設定開啟 set global slow query log 1 預設未開啟,開啟會影響效能,mysql重啟會失效 2 檢視日誌路徑和是否開啟 show variables like slow query log 3 設定閾值 se...
mysql語句的優化(調優)
1 單條查詢最後新增 limit 1,停止全表掃瞄 否則,若無索引,將會查的太多 2 where子句中不要使用 否則放棄索引全表掃瞄。3 盡量避免 null 值判斷,否則放棄索引全表掃瞄。優化前 select number from t1 where number is null 優化後 selec...