zoukankan      html  css  js  c++  java
  • mysql查询优化2:列选择原则

    1、字段类型选择优先级:整型 > date,time > enum ,char >varchar >blob,text

    2、列的特点分析

    整型:定长,没有国家/地区之分,没有字符集的差异

    如:tinyint 1,2,3,4,5  <---> char(1) a,b,c,d,e

    从空间上都是占1个字节,但是order by排序时,tinyint快,原因时是:因为char类型需要考虑字符集和校对集

    time :定长,运算快,节省空间,如果考虑时区写sql时不方便

    enum :能起到约束的作用,内部实质是用整型来存储,但与char联查时,内部要经历串与值得转化

    char :定长,要考虑字符集和校对集

    varchar :不定长,要考虑字符集得转换与排序时得校对集,速度慢

    text /blob : 可存储较大的数据,但无法使用内存临时表(排序等操作只能在磁盘上进行)

    ## 关于date/time 的选择,建议用int unsigned not null 来存储时间戳

    ## 指定数据类型时,够用就可以了,不建议多给,因为大的字段浪费内存,影响速度

    以年龄为例:tinyint unsigned  not null 可以存储255岁,用int 会浪费3个字节

    以varchar(10),varchar(300) ,如果存储的内容相同时,在表联查时,varchar(300)要花更多内存

    举例:以性别为例,

    char(1):要用到3个字长字节

    enum('男','女'):内部会转为数字来存,多了一个转换过程

    tinyint (1/2/3): 定长,1个字节(最快)

    3、尽量避免用NULL()

    原因:NULL不利于索引,要用特殊的字节来标注;null在磁盘上占据的空间其实更大

  • 相关阅读:
    【转】字典转模型需要注意的问题,以及第三方框架来处理字典转模型
    【转】使用SOAP访问Web服务
    Foundation框架2
    Foundation框架1
    什么是Protocol
    什么是Block
    什么么是Category
    ARC
    autorelease简介
    循环retain
  • 原文地址:https://www.cnblogs.com/wodexk/p/10708475.html
Copyright © 2011-2022 走看看