(3.4)常用知识-char与varchar的选择
1.char与varchar的比较
(1)数据存储开销
【1】varchar列需要2个额外的字节来记录存储数据的长度
【2】每个可为null的char列,需要一些字节(空位图)来反应数据的为空性
【3】无论数据多少,char都占定义的长度分配的存储空间
【4】varchar是存储多少空间,就占多少空间,最大不能超过定义的空间,除此之外还需要2个额外的字节如【1】中所属。
【5】索引上的数据存储不需要额外的内部开销,索引数据的存储方式与数据也在数据的存储方式一样。
(2)NULL值
【1】char列的null占用存储空间
【2】varchar列的null不占存储空间
【3】插入同样数量的null,varchar比char效率高出很多
(3)插入数据
【1】无论是否有索引,char的效率都低于varchar的效率
(4)更新数据
【1】如果更新的列未建立索引,则char的效率低于varchar,但区别不大
【2】如果更新的列简历的索引,则char的效率低于varchar,且区别较大
(5)修改结构
【1】无论是增加还是删除,char与varchar的效率没有什么差异
【2】对于增加列的宽段而言,varchar基本上不花多少时间(因为本来就给它预留了那么多空间并且是根据实际存储数据来分配空间),char则需要花费很长时间(要考虑页分裂、或存储到ROW_OVERFLOW_DATA)
(6)数据检索
【1】无论是否有索引,varchar都比char的扫描要略优。(因为扫描的长度与页数)
2.如何选择char与varchar
(1)char使用情况
【1】列汇总的各行数据长度基本一致,长度变化小,不超过50字节
【2】数据变更频繁,检索需求少
【3】列长度不会经常变化,因为修改char类型的列宽代价很大
【4】不要出现大量null,因为char中null占存储空间
【5】列上不需要建过多索引,过多的索引对char列的数据变更影响较大
(2)varchar使用情况
【1】列中各行长度差异较大
【2】列中数据更新非常少(因为虽然是存多少占多少空间,但是为了避免增长导致使用row_overflow_data),但查询非常频繁
【3】列中没有数据,或为null、空值
3.其他影响因素
(1)列是否允许NULL值
如果允许,则需要考虑NULL值所占数据的比例,定义char null的列时,需要额外的开销来反应为NULL的情况,这回导致插入NULL值分配更多的空间,影响性能,当大表且NULL量较大时,性能影响非常明显。
(2)磁盘空间开销
使用char存储数据时,它占用的空间长度为列定义的长度,与实际数据长度无关,因此往往意味着会比varchar消耗更多存储空间
(3)内存大小
SQL SERVER 以页为单位,数据占用的页越多,往往以为着内存消耗更高,如果数据还没有加载到内存中则读取更多的数据页也意味着更多的磁盘I/O。
(4)数据传输
数据传输主要考虑服务器到客户端,或者是服务器之间的数据交互,或者是与其他系统的数据交互。
(3.4)常用知识-char与varchar的选择的更多相关文章
- char、varchar和nvarchar的区别
首先char.varchar和nvarchar.text.ntext都是数据库中的文本数据类型,再区分区分var前缀.n前缀的区别.而text.ntext已经普遍被varchar(MAX)和nvarc ...
- MySQL的char和varchar
一.VARCHAR与CHAR字符型数据的差异 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char,这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是从数据的保存方式来 ...
- 2019-2-20Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
varchar 和 nvarchar区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字 ...
- MySQL数据库char与varchar的区别分析及使用建议
在数据库中,字符 型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用.在字符型数据中,用的最多的就是 Char与Varchar两种类型.前面的 ...
- char 与 varchar 区别
MySQL中的字符串有两个常用的类型:char和varchar,二者各有优势,下面我们来详细分析一下. 转载加补充 在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类 ...
- (3.10)常用知识-T-SQL优化
关键字:SQL优化 总结: 1.书写问题 2.表连接方式 3.索引的抉择 4.执行计划之参数嗅探,使用提示强制执行计划 5.子查询与表连接的效率 6.临时表.CTE.表变量的选择 7.常用sp与sel ...
- SQL中char、varchar、nchar、nvarchar 详解
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. varchar[ ...
- Sql Server char、varchar、nchar、nvarchar的区别
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符,根据 ...
- 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...
随机推荐
- 随机数:rand()
首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include<stdlib ...
- EcShop开发手册
Ecshop文件结构 ecshop文件架构说明 ECShop 结构图及各文件相应功能介绍 ECShop upload 的目录 ┣ activity.php 活动列表 ┣ affiche.php 广告处 ...
- Selenium 详解xpath定位
xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有.现在我们就来详解xpath定位方法. 一.xpath通过元素属性定位 xpath可以通过元素的属性来定位,如 ...
- THU-CCF WC2019两开花记
今年年初,清华大学举办的THUWC2019即将正式开启,我将继续扮演蒟蒻OIER,努力创造一个菜鸡的形象,THU-CCF WC两爆炸,笑掉各位大牙,大家多多关注. Day0 广州好热啊╰(‵□′)╯! ...
- [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)
题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...
- 《Effective Java》读书笔记 - 7.方法
Chapter 7 Methods Item 38: Check parameters for validity 直接举例吧: /** * ...其他的被我省略了 * @throws Arithmet ...
- 20175221曾祥杰 实验四《Android程序设计》
实验四<Android程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:曾祥杰 学号:20175221 指导教师:娄嘉鹏 实验日期:2019年5月13日 实验时间: ...
- POJ 1625 Censored ( Trie图 && DP && 高精度 )
题意 : 给出 n 个单词组成的字符集 以及 p 个非法串,问你用字符集里面的单词构造长度为 m 的单词的方案数有多少种? 分析 :先构造出 Trie 图方便进行状态转移,这与在 POJ 2278 中 ...
- 案例ORA-00600: internal error code, arguments: [qkaffsindex3], [], [], [], []
执行更新统计信息语句: exec dbms_stats.gather_schema_stats(ownname=>'LIVE_KS',degree=>2,cascade=>true, ...
- webpack的安装和运行
webpack依赖于node,为了可以正靠运行,必须依赖node环境.node环境为了可以真正的执行很多代码,必须其中包含各种依赖的包npm工县(node packages manager)所以在进行 ...