转:http://tech.diannaodian.com/dw/data/sql/2011/1005/135572.html

一、数据行结构

1、char(n): 系统分配n个字节给此字段,不管字段实际长度(后边用空格补齐)

2、varchar(n): 假设表中有M个varchar(或者nvarchar)类型的字段

先分配两个字节(用来表示M)

再分配2*M个字节(表示各变长行的偏移)

此后字段值有多长,就分配多长

二、varchar(n)一定比char(n)节省空间么?

不一定。

我见过这样的设计: varchar(3)

就算此字段为空,也还是比char(3)多用一个字节。

还有这样的设计: user_ip varchar(16).

对于这种数据长度变化不大的字段,用varchar只能浪费空间

结论: varchar适用于数据值长度不太短,且长度变化较大的字段

三、char(n)一定比varchar(n)速度快么?

不一定

计算varchar的偏移是会花去一些cpu时间,但性能瓶颈不在此,在io.

db的io单位是数据页(8192字节)(一页存有多个数据行,数据行不能跨页。当然image,text等例外).

因此一页中行越多,性能越好。这样就又归结到前边的问题了

遗留问题:对于频繁更新的表,varchar是否会导致分页等问题?影响程度

在检索上,就算不考虑索引,char是定长的,移动到下一条记录,只需要做固定长度的指针偏移即可。varchar则必须根据当前记录的长度算出下一个数据指针的偏移。

char和varchar查询速度、存储空间比较详解(转)的更多相关文章

  1. SQL中char、varchar、nchar、nvarchar 详解

    char     char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. varchar[ ...

  2. Oracle中的SQL分页查询原理和方法详解

    Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006

  3. 图解大数据 | 海量数据库查询-Hive与HBase详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  4. mybatis关联查询resultmap的使用详解resultmap

    因为该案例比较典型,所以记录一下,恐后期有所疑问,以便用时便于会议. 案例典型在 关联关系典型 主表一张业务模板表 TABLE_NAME  COLUMN_NAME COMMENTS YMIT_BIZ_ ...

  5. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  6. Mysql分组查询group by语句详解

    (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; ...

  7. MySQL慢查询分析工具pt-query-digest详解

    一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...

  8. sqlserver查询使用with(nolock)详解

    所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...

  9. mysql explain 查询处理的结果详解

    本文转自 https://blog.csdn.net/boss_way/article/details/91416887 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这 ...

随机推荐

  1. python中的format

    format()格式化字符串,将占位符替换成内容,举个例子: 1 a = "hello {0} welcome to {1}" 2 a1 = a.format("dlrb ...

  2. 【3-20】html 基本知识/表格/超链接

    一.HTML (一).HTML定义 HTML:是指超文本标记语言,用浏览器打开的文件 超文本标记语言:是指页面内包含文本.图片.视频.音频等元素的计算机编程语言 (二).基本格式: <html& ...

  3. Ubuntu系统tensorflow安装问题及解决

    su root   ps:如果你没有改过root密码,sudo passwd 然后输入你的账户密码,然后设置你的root密码 在root权限下执行pip install --upgrade pip 更 ...

  4. JVM虚拟机宕机_java.lang.OutOfMemoryError: unable to create new native thread

    原因:当前用户的系统最最大程序数数已达到最大值,使用ulimit -u可以看到是1024   解决办法:在当前用户下使用ulimit -u 65535 然后再执行jsp,一切ok     功能说明:控 ...

  5. uri,url和urn的区别以及URLEncoder

    java.net.URL类不提供对标准RFC2396规定的特殊字符的转义,因此需要调用者自己对URL各组成部分进行encode.而java.net.URI则会提供转义功能.因此The recommen ...

  6. ubuntu16.04搭建geodjango+postgresql+postgis的WebGIS框架(二))安装postgresql和postgis

    卸载老版本sudo dpkg --purge postgis postgresql-9.3-postgis1.安装postgresql sudo apt-cache search postgresql ...

  7. Deque 双端队列 Stack 堆栈

    1. peek 获取栈顶元素 pop   删除栈顶元素

  8. VC开发中一些问题的解决

    (1) MFC:在视频窗口上显示一个图片: 使用button显示图片的话,鼠标点击好图片(按钮)上,窗口无法响应. 应该使用一个static静态控件来显示,这样不会妨碍视频窗口对鼠标消息的响应. (2 ...

  9. 20165304《JAVA程序设计》第四周学习总结

    教材内容总结 第五章 子类与继承 1.子类声明中通常用关键字extend来定义一个子类(class 子类名 extend 父类名{}) 2.子类和父类在同一包中的继承性,继承的成员变量或方法的访问权限 ...

  10. xlwt模块

    python使用xlwt模块操作Excel 该模块安装很简单 $ pip install xlwt 语法 import xlwt # 创建一个workbook 设置编码 workbook = xlwt ...