MYSQL字符類型

標籤(空格分隔): 高性能MYSQL 第四章 schema與數據類型 字符類型


  1. VARCHAR和CHAR

    值的存儲與具體的存儲引擎有關,下面以InnoDB爲例說明

    1.1. VARCHAR

    這長字符串,需要1或2個額外的字節記錄字符長度。VARCHAR(10) 11byte,VARCHAR(1000) 1002byte。update時可能使行變得更長,消耗較大。

    適用:
        1. 字符串值的最大長度比平均長度大得。
        2. 列的更新少
    

    1.2. CAHR

    定長字符串。當值不足指定長度時,會以空格填充,所以不能識別末尾處的空格,相當於刪除末尾空格。

    適用:
        1. 值短
        2. 所有的值長度接近
        3. 經常變更
    

    VARCHAR(5)、VARCHAR(200)哪個來存儲”HELLO”更有優勢?
    VARCHAR(5)更好,因爲MYSQL會分配固定的大小的內存塊來保存內部值。尤其是使用(內存、磁盤)臨時表進行排序和操作時,會浪費大量內存。

  2. VBLOB和TEXT

    字符類型:TINGTEXT SMALLTEXT TEXT MEDIUMTEXT LONGTEXT
    SMALLTEXT TEXT是同義詞

    二進制類型:TINGBLOB SMALLBLOB BLOB MEDIUMBLOB LONGBLOB
    BLOB SMALLBLOB是同義詞

    2.1. MYSQL把BLOB和TEXT值當作一個獨立的對象處理。

    值太大時,InnoDB會使用專門的“外部”存儲區域進行存儲,此時每個值在行內需1~4個字節存儲一個指針

    2.2. 只對每列的最前max_sort_length做排序,也可以使用order by substring(cloumn ,length)。

    技巧:使用order by substring減少臨時表的空間
    
  3. 使用杖舉(ENUM)代替字符串

    數據實際存儲爲整數,在表的.frm文件中存在“數字-字符串”的映射,且排序也是按內部整數排序。排序問題可以用order by field([field])解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章