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

  • 相关阅读:
    浏览器内核
    手机端开发适配问题
    关于样式的问题
    nginx和uwsgi的区别和作用
    Flask (七) 部署
    Flask (六) 项目(淘票票)
    Flask (五) RESTful API
    Flask (四) 模型进阶
    Flask (三) 数据迁移
    Flask (二) cookie 与 session 模型
  • 原文地址:https://www.cnblogs.com/shixm/p/5510615.html
Copyright © 2011-2022 走看看