高性能MySQL讀書筆記---建表及數據類型優化

數據類型優化

1.數據類型優化web

    • 儘可能使用能夠正確儲存數據的最小數據類型,例如狀態字段時只有只須要幾個數字就使用tinyint而不是int類型
    • 儘可能使用簡單的方式去存儲數據,能夠用整形表示的時候就不要用字符串類型 例如性別,IP等、
    • 避免NULL值的使用,建表時儘可能使用NOT NULL,數據庫讀取NULL時須要額外的計算,很難優化。
    • 除非在用精度很是高的狀況下才使用DEIMAL類型,計算時須要額外的內存開銷。能夠考慮使用BIGINT來代替DEIMAL須要保留兩位小數時乘以100存入,在應用程序處作處理。
    • CHAR類型時候儲存很短的而且長度比較固定的字符串,例如MD5值。
    • 對於將來可變的短字符串,儘可能避免使用枚舉。
    • 如有按時間統計數據的需求儘可能使用時間類型來存儲時間格式而不是用時間戳來存儲(有疑問,正常來講使用時間戳處理時間不是更方便一點??)
    • 避免一張表中有過多的字段
    • 儘可能使用整形做爲列標識符,處理起來更方便一點。
    • 儘可能使用使用相同的類型存儲相同或則類似的值,特別是須要在關聯查詢中使用的列。
    1. 範式和反範式redis

      • 概念:1NF.屬性不可拆分,2NF.其餘字段都依賴主鍵存在,3NF.各類信息只在一個地方存儲。
      • 範式的優缺點sql

        優勢:更新操做比反範式更快。
             不多或者沒有冗餘數據,修改只須要修改更少的數據
             查詢單表數據,獲取一些數據更方便一點
        缺點:一般狀況下查詢數據時都須要至少一次的關聯查詢,可是查詢時又須要儘可能的避免多表關聯查詢,須要在應用程序中作更多連表處理,可能會致使表索引失效。
      • 反範式的優缺點數據庫

        優勢:數據都在一張表中索引比較好建,一般狀況下查詢起來更方便一點,而不是符合範式的須要不少的連表操做。
        缺點:會有不少的冗餘數據,修改和刪除時不方便。
      • 一般狀況下是範式和反範式是混用的,須要本身抉擇怎麼使用更好一點。
    2. 彙總表和緩存表
      一般狀況下須要統計一張表中的總計數據時而且表中數據更新很頻繁而且數據不少時,須要彙總表來配合,而不是直接去查詢主表數據,例如須要獲取過去一個月的訂單,過去二十四小時的消息發送量,過去一天的用戶註冊量。彙總表須要每隔一段時間去統計數據,例如天天晚上同步上一天的訂單數據存入彙總表,每隔一個小時同步上一個小時的消息發送數據。 但是這樣作又會致使數據延遲,能夠在查詢時過往數據在彙總表彙總查詢,最新的數據在主表中查詢。高效,簡單,準確,只能知足其中兩個。
    3. 計數器表
      計數器表在web應用程序中使用很頻繁.例如統計朋友圈的點贊數,某個文件的下載量,空間訪問人數等。使用計數器表使查詢更高效。固然有redis之類的nosql數據庫是仍是建議使用緩存來統計,更方便一點,例如使用的有序集合來統計點贊數量,還能作排行榜功能。
    4. 爲了查詢更高效,一般須要加額外的索引,冗餘列,冗餘的彙總表等。加大了維護難度,使寫入時更麻煩一點,可是能很大的提高了讀的效率。
    相關文章
    相關標籤/搜索