char和varchar查询速度、存储空间比较详解(转)
转: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查询速度、存储空间比较详解(转)的更多相关文章
- SQL中char、varchar、nchar、nvarchar 详解
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. varchar[ ...
- Oracle中的SQL分页查询原理和方法详解
Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006
- 图解大数据 | 海量数据库查询-Hive与HBase详解
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...
- mybatis关联查询resultmap的使用详解resultmap
因为该案例比较典型,所以记录一下,恐后期有所疑问,以便用时便于会议. 案例典型在 关联关系典型 主表一张业务模板表 TABLE_NAME COLUMN_NAME COMMENTS YMIT_BIZ_ ...
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
- Mysql分组查询group by语句详解
(1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; ...
- MySQL慢查询分析工具pt-query-digest详解
一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...
- sqlserver查询使用with(nolock)详解
所有Select加 With (NoLock)解决阻塞死锁 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS ...
- mysql explain 查询处理的结果详解
本文转自 https://blog.csdn.net/boss_way/article/details/91416887 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这 ...
随机推荐
- 《算法》第五章部分程序 part 6
▶ 书中第五章部分程序,包括在加上自己补充的代码,非确定性有穷自动机(NFA),grep 命令(利用 NFA 匹配) ● 非确定性有穷自动机(NFA) package package01; impor ...
- twisted reactor执行流程
#reactorbase的主循环 def mainLoop(self): while self._started: try: while self._started: # Advance simula ...
- ubuntu16.04搭建geodjango+postgresql+postgis的WebGIS框架(三)加载空间数据
之前两篇基本上搭好了geodjango开发的环境了,当然你的电脑上肯定要有python和django的环境(这个我就不介绍了,网上一搜一大堆),我自己用的python3.5和django2.0(毕竟2 ...
- springboot与mybatis相结合
1.异常 发生受察时异常提交请求发生运行时异常 回滚 2.yml配置 server: port: 8888 # 配置mybatis mybatis: mapper-locations: classpa ...
- SonarQube与Eclipse配合
Sonar安装 下载Sonar 点击下面网址下载Sonar: http://dist.sonar.codehaus.org/sonar-3.5.1.zip ,下载后解压 解压后安装 解压后你将要看到如 ...
- js 定义一个对象并且给对象赋值方法
var obj={}; obj.a="12"; obj.b="13" var o ={}; o.jsonObj=obj; 取得属性值直接用 obj.a; ob ...
- html 基础之a标签的属性target解析
学习前端,有很多标签其实有很多不同的功能,但是用到的不多,所以就没有发现:当发现的时候,觉得很不可思议,有耳目一新的感觉.例如a 标签,之前只是知道,使用a标签,可以打开一个链接,然后访问一个新的页面 ...
- HashSet和LinkedHashSet解析
一.简介 1.Set概念 Set可以理解为集合,非常类似数据概念中的集合,集合三大特征:1.确定性:2.互异性:3.无序性,因此Set实现类也有类似的特征. 2.HashSet HashSet继承自A ...
- Linux:结束线程的三种方式
一般情况下,线程终止后,其终止状态一直保留到其它线程调用pthread_join获取它的状态为止.但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态. ...
- unity 解决ScrollRect嵌套滚动问题
在子级有ScrollRect组件的对象添加以下脚本: using UnityEngine; using System.Collections; using UnityEngine.UI; using ...