高性能MySQL笔记 第4章 Schema与数据类型优化
- VARCHAR 类型用于存储可变长字符串。
- CHAR 类型用于存储定长字符串。非常适用于存储MD5值。
- VARCHAR 需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节。VARCHAR节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在update时可能使行变得比原来更长,这就导致需要做额外的工作,不同的存储引擎的处理方式是不一样的。例如,MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内。
- BLOB采用二进制方式存储,没有排序规则或字符集。
- TEXT采用字符方式存储,有字符集和排序规则。
- TINYTEXT SMALLTEXT TEXT MEDIUMTEXT LONGTEXT,其中TEXT=SMAILLTEXT。
- TINYBLOB SMALLBLOB BLOB MEDUIMBLOB LONGBLOB,其中BLOB=SMALLBLOB。
- 太多的列
- 太多的关联:最好小于12
- 错误使用枚举
- 非此发明的NULL
- 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
- 第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识(主键)。
- 第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
- 范式化的更新操作通常比反范式化要快;
- 当数据较好地范式化时,就只要很少或者没有重复数据,所以只需要修改更少的数据;
- 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快;
- 很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。
- 避免关联;
- 冗余字段;
- 尽量避免过度设计,例如会导致极其负责查询的schema设计,或者有很多列的表的设计;
- 使用小而简单的适合数据类型,除非真实数据模型镇南关有确切的需要,否则应该尽可能地避免使用NULL值;
- 尽量使用相同的数据类型存储相似或相关的值,尤其是要在关联条件中使用的列;
- 注意可变长字符串,其在临时表中排序时可能导致悲观的按最大长度分配内存;
- 尽量使用整形定义标识列;
- 避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,后者整数的显示宽度;
- 小心使用ENUM和SET。虽然他们用起来很方便,但是不要滥用,否则有时候会变成陷阱。最好避免使用BIT;
高性能MySQL笔记 第4章 Schema与数据类型优化的更多相关文章
- mysql笔记01 MySQL架构与历史、Schema与数据类型优化
MySQL架构与历史 1. MySQL架构推荐参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2397536.html 2. MySQL会解 ...
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- 高性能MySQL笔记-第4章Optimizing Schema and Data Types
1.Good schema design is pretty universal, but of course MySQL has special implementation details to ...
- 高性能MySQL笔记 第5章 创建高性能的索引
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而 ...
- Mysql高性能笔记(一):Schema与数据类型优化
1.数据类型 1.1.几个参考优化原则 a. 更小的通常更好 i.更小的数据类型,占用更少磁盘.内存和CPU缓存,需要的CPU周期更少 ii.如果无法确定哪个数据类型是最好的,就选择不会超过范围的最 ...
- 高性能MySQL笔记-第1章MySQL Architecture and History-001
1.MySQL架构图 2.事务的隔离性 事务的隔离性是specific rules for which changes are and aren’t visible inside and outsid ...
- 高性能MySQL笔记-第5章Indexing for High Performance-004怎样用索引才高效
一.怎样用索引才高效 1.隔离索引列 MySQL generally can’t use indexes on columns unless the columns are isolated in t ...
- 高性能MySQL笔记-第5章Indexing for High Performance-002Hash indexes
一. 1.什么是hash index A hash index is built on a hash table and is useful only for exact lookups that u ...
- 高性能MySQL笔记-第5章Indexing for High Performance-001B-Tree indexes(B+Tree)
一. 1.什么是B-Tree indexes? The general idea of a B-Tree is that all the values are stored in order, and ...
随机推荐
- Java基础复习笔记系列 二
1.Java中Static的相关用法总结?(静态方法:静态变量:静态代码块) public static void main(String args[])执行的关键,在于有static.有了stati ...
- get()和post()方法编码的区别
在做ssh搭建的框架中,在后台条件查询的时候,组合查询传到后台的值一直是乱码,其中在form表单中必须要加上method,这一点是肯定的,但是加上了提交的方式之后,会出现如下问题: 如果使用get方法 ...
- letter-spacing
letter-spacing:3px的意思就是字母之间的间距是3px:
- 多线程下C#如何保证线程安全?
多线程编程相对于单线程会出现一个特有的问题,就是线程安全的问题.所谓的线程安全,就是如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是 ...
- 10个最好的 JavaScript 动画库和开发框架
虽然 CSS3 动画功能能够让我们以简单轻松的方式实现动画效果,但是浏览器兼容性问题让人头疼.不过不用担心,我们还有另外的武器——JavaScript,它同样可以帮助你实现各种各样的动画效果,而且借助 ...
- 8款适合乐队、歌手和音乐家免费 WordPress 主题
这篇文章与大家分享8款适合乐队.歌手和音乐家免费 WordPress WordPress 音乐网站主题.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许 ...
- 小白的vue学习路程
最近公司开发新的项目,前端框架选定vue,对于前端小白的我,需要自己学习补充能量. vue的最大特点:响应的数据绑定.组合的视图组件. vue文件里面包含三种:<template>html ...
- Navigator对象、Screen对象
Navigator对象: Window对象的navigator属性引用的是包含浏览器厂商和版本信息的Navigator对象: Navigator对象集合:plugins[] 返回对 ...
- 妙用Javascript中apply、call、bind
对apply.call.bind的认识,并且列出一些它们的妙用加深记忆. apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(cont ...
- git 上的pull request 是什么意思?
1.git 上有常见的pull request 功能 2.pull request 的含义 解释一: 有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Gi ...