zoukankan      html  css  js  c++  java
  • 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则必须根据当前记录的长度算出下一个数据指针的偏移。

  • 相关阅读:
    Django连接SQL Server,安装相关扩展包及相关配置
    安装pipenv
    报错及网络上的解决方案
    Nucleus-SE迁移:未实现的设施和兼容性
    RTOS诊断和错误检查
    Nucleus SE RTOS初始化和启动
    Nucleus 实时操作系统中断(下)
    Nucleus 实时操作系统中断(上)
    系统时间
    应用程序计时器
  • 原文地址:https://www.cnblogs.com/shixm/p/5510615.html
Copyright © 2011-2022 走看看