码迷,mamicode.com
首页 > 数据库 > 详细

mysql优化

时间:2018-05-09 01:12:05      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:HERE   增加   常用   国家   时区   个人简介   临时表   date   tin   

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的弱势

 

mysql优化

标签:HERE   增加   常用   国家   时区   个人简介   临时表   date   tin   

原文地址:https://www.cnblogs.com/li-yi-learn/p/9011869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!