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语句,找出这 ...
随机推荐
- 插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js
插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...
- 《算法》第三章部分程序 part 1
▶ 书中第三章部分程序,加上自己补充的代码,包括单词频率统计,(单链表)顺序查找表,二分查找表 ● 单词频率统计 package package01; import edu.princeton.cs. ...
- 《锋利的JQuery》中的动画效果:
说实话,虽然这本书已经很老了,老到什么程度呢,这本书以JQuery1.9以前的版本写就的,toggle()方法的(func1,func2,...)这个切换事件的功能已经被删去了 但是这本书还是挺8错的 ...
- 修改Tomcat的网页端口和指向路径
网页端口是在 D:\web\apache-tomcat-6.0.32\conf 下的server.xml <Connector port="8080" protocol=&q ...
- Phabricator代码审核Audit用户指南
作者: shaneZhang 分类: 互联网技术 发布时间: 2015-07-04 13:37 概览 Phabricator支持两种代码审查工作流:“review”(提交前审查)和 “audit”(提 ...
- day38-常见第三方模块
1.requests模块 2.psutil模块 3.xlrd模块 4.xlwt模块 5.Paramiko模块
- 池以及barrier简单
用了下CyclicBarrier,注意线程池中的线程数量设置,还有就是DB连接的时候,需要考虑单个DB能承受的最大连接数目和每个连接上能同时打开的cursor等限制,需要时可以通过jstack查看堆栈 ...
- Review CSS Selectors
Throughout this lesson, you learned how to select HTML elements with CSS and apply styles to them. L ...
- 在Linux中简单实现回收子进程
学习到wait函数了,这个函数的作用是用来回收进程.一般来说,正常退出的进程是不需要我们来专门回收的.但是进程有这两种:孤儿进程和僵尸进程. 孤儿进程: 通俗点说就是父进程先于子进程死亡.此时子进程就 ...
- C++操作oracle数据库
数据库操作方式:可以采用ADO方式,也可以采用oracle本身提供的Proc*C/C++或者是OCCI方式操作数据库. 连接方式:可以是客户端连接.也可以是服务器端连接. 数据库配置:无论是何种连 ...