mysql优化

1.表的优化和列类型的选择

  a.定长与变长分离:

  如:id int 占四个字节,char(4)占四个字节,也是定长,time即每一个单元之占的字节是固定的。

  核心且常用字段,直建成定长,放在一张表中。

  而varchar,text,blob这种变长字段,适合放在一张表中,用主键与核心表连接起来。

栗子:比如说一个学生信息:学号,性别,年龄,电话号码等放在主表中,而个人简介等放在补充表中,用来作为不常用查询的表值。

 

2  常用字段和不常用字段要分离、

  需要结合网站具体的业务来分析,肥西字段的查询场景,把查询评率低的字段单拆出来

3  在一对多,需要关联同级的字段上,添加冗余字段,增加效率。

 

列类型的选择:

  字段优先级:整型 > date,time > enum,char > varchar > blob,text

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

  time :定长,运算快,节省时间,考虑时区,写sql不方便  :where > '2005-10-12'

  char :定长,考虑字符集和排序(校对集)

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

  text,blob; 无法使用内存临时表(排序等操作只能在硬盘上进行

  附(关于date,time的选择,大师的明确意见,直接选int unsigned not null,存储时间戳)

 

2 够用就行,不要慷慨(如 smallint  ,varchar(N))

  原因:大的字段浪费内存,影响速度

  栗子:年龄,tinyint unsigned not null,可以存储255岁,用int 浪费了3个字节

    以varchar(10),varchar(200)存储的内容相同,但是表联查时,varchar(200)要花费更多内存

3 尽量避免用null

  原因:null不利于索引,用用特殊的字节来标注。

  在磁盘上占据的空间其实更大。(mysql)

  另外,null也不便于查询

4 Enum列的说明、

  1.enumeration列在内部是用整型来存储的

  2enum列与enum列相关联速度最快

  3enum列比varchar的弱势

 

posted @ 2018-05-08 23:58  逐风一缕  阅读(122)  评论(0编辑  收藏  举报