程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中采用類型varchar(20)和varchar(255)對性能上的影響

MySQL中采用類型varchar(20)和varchar(255)對性能上的影響

編輯:MySQL綜合教程

MySQL中采用類型varchar(20)和varchar(255)對性能上的影響



1.MySQL建立索引時如果沒有限制索引的大小,索引長度會默認采用的該字段的長度,也就是說varchar(20)和varchar(255)對應的索引長度分別為20*3(utf-8)(+2+1),255*3(utf-8)(+2+1),其中"+2"用來存儲長度信息,“+1”用來標記是否為空,加載索引信息時用varchar(255)類型會占用更多的內存; (備注:當字段定義為非空的時候,是否為空的標記將不占用字節)例如,測試sql(InnoDB引擎)如下:
CREATE DATABASE TestDataBase
USE TestDataBase
CREATE TABLE ABC (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ALTER  TABLE  `ABC`  ADD  INDEX `nameIndex` (`name`)
explain select name from ABC
alter table ABC  modify name varchar(255)
explain select name from ABC

varchr(10)變長字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(變長字段) varchr(10)變長字段且不允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+2(變長字段) char(10)固定字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL) char(10)固定字段且允許NULL:10*(Character Set:utf8=3,gbk=2,latin1=1)根據這個值,就可以判斷索引使用情況,特別是在組合索引的時候,判斷所有的索引字段都被查詢用到。
2.varchar(20)與varchar(255)都是保持可變的字符串,當使用ROW_FORMAT=FIXED創建MyISAM表時,會為每行使用固定的長度空間,這樣設置不同的varchar長度值時,存儲相同數據所占用的空間是不一樣。通常情況下使用varchar(20)和varchar(255)保持'hello'占用的空間都是一樣的,但使用長度較短的列卻有巨大的優勢。較大的列使用更多的內存,因為MySQL通常會分配固定大小的內存塊來保存值,這對排序或使用基於內存的臨時表尤其不好。同樣的事情也會發生在使用文件排序或者基於磁盤的臨時表的時候。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved