MySQL數據類型

MySQL的數據類型對性能相當重要,整體上有幾個原則:網絡

    a. 越小越好。小數據對計算和存儲、網絡的開銷都更少,但不能低估存儲值的範圍。工具

    b. 越簡單越好。整型比字符串更快。性能

    c. 儘可能避免NULL。若是該列沒有指定爲NOT NULL,會默認容許NULL。NULL使索引、索引統計、值比較更復雜;其被索引時,每一個索引記錄須要一個額外字節。InnoDB使用單獨的bit存儲NULL值,是一種優化。優化

MySQL的基本數據類型以下:指針

  1. 整數。TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,長度分別爲1-8字節,能夠設置UNSIGNED屬性。INT(1)和INT(32)在性能上沒有區別,隻影響交互工具顯示。
  2. 實數。FLOAT(4 Bytes)、DOUBLE(8 Bytes)、DEMICAL。MySQL以DOUBLE做爲內部計算類型。DEMICAL(18,9)表明小數點先後各有9位;DEMICAL中,每4字節能夠存9位數字,小數點佔一個字節。在一些應用中,能夠乘10^N使用BIGINT替代DEMICAL。
  3. 字符串。VARCHAR和CHAR,具體存儲方式由存儲引擎決定,可能與內存交互時須要轉換。VARCHAR(N)存儲變長字符串,並用額外的字節存儲實際長度變長致使UPDATE的開銷更大,可能頁內沒有更長的空間存儲。CHAR(N)是定長存儲。對於短字符串、定長字符串、常常更新的字符串,CHAR更有優點。此外,CHAR會刪除值末尾的空格。VARCHAR(5)和VARCHAR(200)在存儲'MYSQL'時磁盤佔用相同,但內存佔用小。
  4. BLOB與TEXT,存儲很長的數據時用。TEXT屬於字符類型,BLOB屬於二進制類型,沒有字符集和排序規則。存儲引擎一般把它們當作單獨的對象存在外部,對應位置存1-4字節的指針。Memory引擎不支持這二者,使用時須要創建MyISAM臨時表,開銷很大;SUBSTRING爲字符串,能夠利用內存臨時表。
  5. ENUM。枚舉能夠用位存儲,而後利用映射表存值。映射表是按定義順序存儲,因此最好按字母排序。ENUM在後期更改時靈活性不足,ENUM之間join速度很快,與VARCHAR的JOIN比較慢。
  6. 日期與時間。DATETIME佔用8字節,以整數存儲,與時區無關;TIMESTAMP最遠表示到2038年,佔4字節。
相關文章
相關標籤/搜索