MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别为203(utf-8)(+2+1),2553(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)

根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断所有的索引字段都被查询用到。

通常情况下使用varchar(20)和varchar(255)保持'hello'占用的空间都是一样的,但使用长度较短的列却有巨大的优势。较大的列使用更多的内存,因为MySQL通常会分配固定大小的内存块来保存值,这对排序或使用基于内存的临时表尤其不好。同样的事情也会发生在使用文件排序或者基于磁盘的临时表的时候。

varchar(20)与varchar(255)都是保持可变的字符串,当使用ROW_FORMAT=FIXED创建MyISAM表时,会为每行使用固定的长度空间,这样设置不同的varchar长度值时,存储相同数据所占用的空间是不一样。

mysql varchar(20)_MySQL中采用类型varchar(20)和varchar(255)对性能上的影响相关推荐

  1. MySQL中采用类型varchar(20)和varchar(255)对性能上的影响

    1.MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别为20*3(utf-8)(+2+1),255 ...

  2. mysql geometry 附近的人_mysql中geometry类型的简单使用(搜索附近的人)

    mysql中geometry类型的简单使用 编写本文的目的: 让和两天前的我一样的初学者,能够更快的使用geometry类型存储空间点数据 也是为了自己加深印象,更熟练的使用geometry类型 建表 ...

  3. mysql geometry 怎么 操作_mysql中geometry类型的简单使用

    mysql中geometry类型的简单使用 编写本文的目的: 让和两天前的我一样的初学者,能够更快的使用geometry类型存储空间点数据 也是为了自己加深印象,更熟练的使用geometry类型 建表 ...

  4. mysql 修改字段类型为字符串_MySQL中字段类型与合理的选择字段类型

    原标题:MySQL中字段类型与合理的选择字段类型 字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是 整数,另一个是 浮点数或小数. 许多不同的子类型对这些类别中的每一个都是可用 ...

  5. mysql timestamp 默认值是什么#039;_MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:/*DDL Information For - test.t1*/----- ...

  6. mysql中signed是什么类型_mysql 中int类型字段unsigned和signed的探索

    转自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正负数问题 拿tinyint字段来举例,unsigned后,字段的取值范围是0-2 ...

  7. mysql自定义数据类型_MySQL中的数据类型

    一.MySQL中的数值类型分类 MySQL中数值类型主要有三类:数字类型,字符串类型,时间类型. 1.数字类型 1.1整数 tinyint  1字节 smallint               2字 ...

  8. php验证mysql内数据_MySQL中数据类型的验证_MySQL

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql> create table t1(name char(256)) default charse ...

  9. mysql join图解_MySQL中Join算法实现原理分析[多图]

    在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nes ...

最新文章

  1. linux 静态编译 glibc,GCC静态链接glibc库
  2. Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log
  3. 未来计算机的缺陷,新技术将计算机芯片缺陷变为优势
  4. BizTalk动手实验(十六)EDI-AS2解决文案开发配置
  5. 中科院计算机学院王宏,王宏-中国科学院大学-UCAS
  6. 算法图解:如何找出栈中的最小值?
  7. js 判断 ““,null,undefined
  8. pythonmap和list_(Python)list的内建函数 filter(), map(), 和 reduce()
  9. 虚拟机安装---vm12+ubuntukylin16.04
  10. 这种思路讲解数据仓库建模,你见过吗?数据人与架构师必看
  11. 深入理解JVM-java内存区域与内存溢出异常
  12. 阿里消息中间件ONS消息乱序问题(二)
  13. 居中为什么用transform,而不是margin top/left
  14. VS2017优质插件总结
  15. 瑞利信道,莱斯信道和高斯信道模型
  16. 适合产品经理的桌面壁纸-分类神器
  17. 桌面显卡和CPU性能天梯图
  18. 拓扑排序(topo_sort)
  19. 「代码家」的学习过程和学习经验分享
  20. 百度地图之根据显示范围获取地图图片

热门文章

  1. 深度学习文本分类在支付宝投诉文本模型上的应用
  2. Windows Server Version 1709 管理之入门篇
  3. 数据结构与算法、讲解、动态规划一脸懵?看完之后轻松掌握!
  4. 小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!
  5. 华为愿出售5G技术渴望对手;苹果将向印度投资10亿美元;华为全联接大会首发计算战略;腾讯自研轻量级物联网操作系统正式开源……...
  6. 振奋!中国正式进入5G元年;华为5G俄罗斯签下大单;王坚进入工程院院士第二轮评审...
  7. K8S的SDN容器网络解决方案【机制篇】
  8. linux coreutils升级,Linux命令01--Coreutils软件包01--认识coreutils
  9. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
  10. docker nexus3