• 北京it兄弟连教育
  • IT兄弟连-好环境,好老师,好课程,好就业,好学员
  • 专注于人工智能培训,大数据,全栈开发,云计算,网络营销等课程

服务咨询热线400-888-4846

「MySQL」优化完整教程之表设计篇

发布时间:05-21 已帮助:1 人 来源:北京it兄弟连教育

「MySQL」优化完整教程之表设计篇

北京数据库培训哪个好,北京数据库培训班,北京数据库开发培训

北京数据库培训哪个好,首选-北京it兄弟连教育,「数据库开发培训课程」专业大咖亲自授课,小班教学,0基础入学,适合所有想要学习数据库开发的学生,入门大精通,高薪就业,无忧学习!

北京it兄弟连教育
「MySQL」优化完整教程之表设计篇

  上一篇文章《MySQL优化系列教程之『检测性能篇』》,对于已经上线的项目,我们简单说了一下优化思路,需要针对具体的病症,对症下药,但说的不够具体。篇文章主要是试水,看看到底有多少需求,本人不做为了写文章而凑数的事儿。
  从这篇文章开始,会陆续开设一个专栏,从服务器到mysql分不同的系列,系统讲解(精确到代码)整个系统工程的优化。
  不管是已经上线的项目,还是刚刚建立的团队准备新项目,都需要从宏观上具备相对完整的脉络图,找到一个项目的瓶颈,进行优化。
  考虑到本人刚就业的学生们,最近的文章都会从表的优化设计开始讲解,对于服务器,我会稍后更新,还请大家耐心等一下。

  表优化和设计原则

  1、定长与变长分离
  如:id int,占4个字节,甭管你数据是1还是20亿,都是4个字节。
  char(4)占4个字符长度,也是定长,因为mysql算的快,自然取得就快。
  即:每一个单元值占的字节是固定的。核心且常用字段,易建成定长,放一张表。
  而像varchar,text,blob这种变长字段,适合单独放一张表,用主键和核心表关联起来。
  2、常用字段与不常用字段分离
  这个需要结合网站的业务来分析,分析字段的查询场景,查询频率低的字段,拆出来。
  如:用户的用户名,手机号,上次登录时间等这些字段,天天查,用户量大了时时刻刻查,但如个人简介,个人详情,很少有人会点开看你这个人啥情况,就可以单独拿出来建表,根据实际的查询频率分离。
  3、合理添加冗余字段
  很多人对冗余字段有误解,冗余字段不是多余字段,合理的冗余字段是为了提高性能。

  列类型选择原则

  1、字段类型优先级
  整型>date/time>enum/char>varchar>blob
  列的特点分析:
  整型:定长,没有国家/地区之分,没有字符集的差异。
  time:定长,运算快,节省空间,考虑时区,写sql时不方便。例如:where>‘2019-04-10’。
  enum:能起约束值得目的,内部用整型来存储,但与char连表查询时,内部要竞购串与值得转化。
  char:定长,考虑字符集和(排序)校对集问题(关于排序校对集会有专门的文章介绍)。
  varchar:变长,要考虑字符集的转换与排序时的校对集,速度慢。
  text/blob:无法使用内存临时表(排序等操作只能在磁盘上进行)
  2、够用就行,不要慷慨
  本着刚好能存储的原则就行,原因是大的字段浪费内存,影响速度。
  比如说:以年龄为例,tinyint unsigned not null,可以到255岁呢,足够了,用int浪费了3个字节。
  以varchar(10),varchar(300)存储的内容相同,但在联查表的时候,varchar(300)要花更多的内存。
  3、尽量避免使用NULL
  原因:NULL不利于索引,mysql内部要用特殊的字节来标注,在磁盘上占据的空间其实更大,虽然mysql5.5已经对NULL做了改进,但查询仍然不便。
  实验:可以建立2张字段相同的表,一个允许为null,一个不允许为Null,各加入1万条,查看索引文件的大小.可以发现,为null的索引要大些.(mysql5.5里,关于null已经做了优化,大小区别已不明显)。
  另外:null也不便于查询,
  where列名=null;
  where列名!=null;都查不到值,
  where列名is null,或is not null才可以查询.

  更多有关python+人工智能开发,Java开发,大数据课程,前端开发,UI设计,云计算开发,互联网营销等专业课程,开课时间,班型级费用,行业招生信息,专业就业前景等,请点击北京it兄弟连教育查询,或在线咨询老师!

上一篇:没有了 下一篇:没有了
课程导航
校区导航