前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高性能MySQL第四章 读书笔记

高性能MySQL第四章 读书笔记

作者头像
用户7962184
发布2020-11-20 14:59:10
5180
发布2020-11-20 14:59:10
举报
文章被收录于专栏:没事多喝水

第4章 Schema与数据类型优化

  • 数据类型的设定原则应该遵循更小的往往更好,越简单越好(如能用data就用data而不用字符串),尽量避免NULL。
  • 如果数据允许NULL,对MySQL来说更难优化,因为可为NULL的列使得索引,索引统计,和值比较都比较复杂。
  • TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,8,16,24,32,64位整数,还有可选的UNSIGNED属性,只保存无属性的值。
  • MySQL可以为整数类型指定宽度,但是对大多数应用这是没有意义的,他不会限制值的合法范围,只是规定一些交互工具显示字符的个数。
  • FLOAT和DOUBLE类型是使用标准的浮点运算进行近似计算。DECIMAL用于存储精确小数,计算过程由MySQL自己实现。
  • VARCHAR需要使用1或者2个额外字节记录字符串的长度。InnoDB还会将过长的VARCHAR储存成BLOB。
  • CHAR在存储的时候,如果存储时后面有空格,查询的时候会被空格剔除掉,因为CHAR填充空白也是用的空格。
  • 如果使用VARCHAR(5)和VARCHAR(200)存储’hello‘,空间开销是一样的,但是,更长的列会消耗更多的内存,因为MySQL会分配固定大小的内存块来保存内部值。
  • MySQL会吧BLOB和TEXT当做一个单独的对象处理,如果他们太大,会使用专门的“外部”存储区域来存储,因此每个值需要1~4个字节存储一个指针。而他们仅有的区别就是TEXT有字符集和排序规则,而BLOB没有。
  • 用枚举代替有限制的字符串,枚举类型在排序的结果中,是按内部的整数存储去排序的。
  • 要确保关联表之间的列的数据类型是一致的。
  • 完全随机的字符串会导致INSERT和一些SELECT语句变慢,因为会写到索引的不同位置,导致页分裂,磁盘随机访问。随机值也会让缓存赖以生存的访问局部性原理失效。
  • MySQL服务器层从存储引擎获取数据之后是需要解码成行数据结构的,如果列特别多,那时候CPU占用就会很高,转化的代价就非常大。
  • 合理运用范式和反范式(允许冗余),缓存表和汇总表来优化查询和业务。
  • 如果是用到一个统计的计数器表,可以增加多几列数据,来增加行表的使用效果。再对生成的数据进行一个汇总。统计到其中一列数据中去。
  • 重申一遍,字段的数据结构尽可能用小而简单的,总是好的。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第4章 Schema与数据类型优化
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档