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

  • 相关阅读:
    Individual Contest #1 and Private Training #1
    2016 GDCPC 省赛总结
    HDU 4000 Fruit Ninja(树状数组)
    HDU 4009 Transfer water(最小树形图)
    HDU 5176 The Experience of Love
    HDU 2121 Ice_cream’s world II(无定根最小树形图)
    UVA 11183 Teen Girl Squad(最小树形图)
    POJ 3164 Command Network(最小树形图)
    最小树形图
    UVA 10462 Is There A Second Way Left?(次小生成树)
  • 原文地址:https://www.cnblogs.com/shixm/p/5510615.html
Copyright © 2020-2023  润新知