Schema与数据类型优化

需要优化的数据类型

  1. 更小的通常更好
  2. 简单就好
  3. 尽量避免NULL

整数类型

存储整数,有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别使用8、16、24、32、64位空间,表示范围为-2^(N-1)到2^(N-1)-1。

整数类型有可选的UNSIGNED属性,表示不允许负值。

INT(11)指定了宽度,但不会限制值的合法范围,只规定了显示的字符个数。

实数类型

带有小数部分的数字,FLOAT占4个字节,DOUBLE占8个字节,DECIMAL占用字节较多但支持高精度运算。

字串类型

VARCHAR存储可变长字串,需要1-2个字节记录字串的长度,若列最大长度超过255字节,使用2个字节记录长度。

CHAR定长,总是根据定义长度分配空间,很适合存储MD5值,相比VARCHAR不容易产生碎片。

类似的还有BINARY和VARBINARY,同时要注意即使是可变长字串,最好也分配更小的空间。

BLOB和TEXT类型

都是为了存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。

字符类型分别为TINYTEXT,SMALLTEXT,TEXT,MEDIUMTEXT,LONGTEXT和TINYBLOB,SMALLBLOB,BLOB,MEDIUMBLOB,LONGBLOB。

MySQL将他们当作独立对象存储,不会直接插入到页中,只能根据指定长度头进行索引,不能全文索引。

使用枚举(ENUM)代替字符串类型

MySQL会将枚举值保存为整数,在外部单独维护这样一个映射表,但枚举不适合经常修改的表。

日期和时间类型

DATETIME保存大范围时间,从1001年到9999年,精度为秒,它将日期封装到YYYYMMDDHHMMSS的整数中,与时区无关,使用8个字节空间。

TIMESTAMP保存从1970年1月1日午夜以来的秒数,与UNIX时间戳相同,只使用4个字节空间,范围小,只能表示1970到2038年。

尽量使用TIMESTAMP。

位数据类型

从技术来说都是字串类型。

BIT,存储多个bool值,最大长度64位。最好少用这个类型,因为转码与显示问题,比较复杂。

SET保存更多的bool值,修改操作代价较高。

选择标识符

  1. 整数通常是最好的选择,因为很快并且可以使用自增;
  2. ENUM和SET,可行但最好不要;
  3. 字符串,绝对不要,占空间速度慢。

Schema设计陷阱

  1. 太多的列;
  2. 太多的关联(单个查询在12表以内作关联);
  3. 全能的枚举(不要过度使用枚举);
  4. 变相的枚举(SET有时可以用作枚举,但最好用ENUM枚举);
  5. NULL(尽量不要用,但该用的时候也要用)。

范式和反范式

范式意味着分表、关联、外键等等,因为单个表或者说数据被拆分了,查询修改性能都会得到提升,但也会导致更多关联操作。

反范式意味着数据都在一张表里,避免了关联操作。

完全的范式和反范式不存在的,正常工作中都是混用的。

缓存表和汇总表

这两个是术语而不是真实存在的表,缓存表表示那些查询缓慢的表,汇总表则是使用了GROUP BY的表。

加快ALTER TABLE操作

常见操作有两种,一是在一台不提供服务的机器上执行ALTER TABLE然后与主库进行切换,二是影子拷贝(重命名与删除)。

修改表定义文件

这种操作是不受官方支持的,因此如果确实要进行,请先备份。

创建新的.frm文件,然后替换已存在的文件。

  1. 创建相同结构的表,执行需要的更改;
  2. FLUSH TABLES WITH READ LOCK;关闭所有正在使用的表,禁止任何表被打开;
  3. 交换.frm文件
  4. 执行UNLOCK TABLES;释放读锁;
  5. 删除辅助表。

高性能MySQL(四)的更多相关文章

  1. 《高性能MySQL》读书笔记--锁、事务、隔离级别 转

    1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...

  2. 《高性能MySQL》

    <高性能MySQL>(第3版)讲解MySQL如何工作,为什么如此工作? MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优.系统配置管理和安全设置.监控分析,以及复制.扩展和 ...

  3. MySQL四种隔离级别和MVCC

    事务在一个数据库中的地位尤为重要,尤其是高并发的场合.保证数据库操作的原子性和错误出现情况下的回滚,对数据的安全性和可靠性提供了保障.事务有四大原则,即ACID原则.网上关于这个问题的文章有很多,读者 ...

  4. 《高性能MySQL》 读书总结

    目录: 第一章.MySQL架构与历史 第二章.MySQL基准测试 第三章.服务器性能剖析 第四章.Schema与数据类型优化 第五章.创建高性能的索引 第六章.查询性能优化 第七章.MySQL高级特性 ...

  5. 【高性能Mysql 】读书笔记(三)

    第5章 创建高性能的索引 本文为<高性能Mysql 第三版>第四章读书笔记,Mysql版本为5.5 索引基础 索引的重要性:找一本800面的书的某一段内容,没有目录也没有页码(页码也可类比 ...

  6. 【高性能Mysql 】读书笔记(二)

    第4章 Schema 与数据类型优化 本文为<高性能Mysql 第三版>第四章读书笔记,Mysql版本为5.5 选择优化的数据类型 选择合适数据类型的三个原则 更小的通常更好 - 速度更快 ...

  7. 【高性能Mysql 】读书笔记(一)

    第1章 Mysql架构与历史 MYSQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理( Query Processing)及其他系统任务( Server Task)和数据的存储 ...

  8. schema与数据类型优化-高性能mysql

    总结作为开发人员重点注意的内容!这是一篇有关高性能MYSQL第四章schema相关的笔记. 0.前言 在项目中,数据库表列有两个text字段,用来存储大文本,在数据规模达到40万后,如果查询没命中索引 ...

  9. 高性能Mysql主从架构的复制原理及配置详解

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  10. 1121高性能MySQL之运行机制

    本文来自于拜读<高性能MySQL(第三版)>时的读书笔记作者:安明哲转载时请注明部分内容来自<高性能MySQL(第三版)> MySQL的逻辑构架 MySQL服务器逻辑架构 最上 ...

随机推荐

  1. (C++一本通)最少转弯问题 (经典搜索)

    题目描述 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能 ...

  2. 标准C程序设计七---57

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. Keep-Alive 长连接(转载)

    短连接与长连接 通俗来讲,浏览器和服务器每进行一次通信,就建立一次连接,任务结束就中断连接,即短连接.相反地,假如通信结束(如完成了某个HTML文件的信息获取)后保持连接则为长连接.在HTTP/1.0 ...

  4. AC日记——[ZJOI2009]假期的宿舍 cogs 1333

    1333. [ZJOI2009] 假期的宿舍 ★★☆   输入文件:zjoi09holiday.in   输出文件:zjoi09holiday.out   简单对比时间限制:1 s   内存限制:25 ...

  5. Java 基础【05】你的多继承纳?

    Java省略了许多很少用到,缺乏了解,混淆功能的C + +,在我们的经验中带来更多的悲伤大于收益 . -----James Gosling James Gosling 这个人大家应该很熟悉,就是最初设 ...

  6. PAT 甲级 1087 All Roads Lead to Rome(SPFA+DP)

    题目链接 All Roads Lead to Rome 题目大意:求符合题意(三关键字)的最短路.并且算出路程最短的路径有几条. 思路:求最短路并不难,SPFA即可,关键是求总路程最短的路径条数. 我 ...

  7. SpringBoot+Mybatis增删改查实战

    简介 SpringBoot和Mybatis是啥请自行百度,作者这里也是花了几天时间入门了这个框架用来完成任务,并且也算符合要求的完成了任务,期间也各种百度但是没找到自己想要的那种简单易懂的教程,所以踩 ...

  8. GRDB使用SQLite的WAL模式

    GRDB使用SQLite的WAL模式   WAL全称是Write Ahead Logging,它是SQLite中实现原子事务的一种机制.该模式是从SQLite 3.7.0版本引入的.再此之前,SQLi ...

  9. 断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天(非原创)

    文章大纲 一.Hystrix基础介绍二.断路器Hystrix简单使用三.自定义Hystrix请求命令四.Hystrix的服务降级与异常处理五.Hystrix的请求缓存与请求合并六.Hystrix仪表盘 ...

  10. 使用JAXP对xml文档进行DOM解析基础

    XML解析方式分为两种:dom和sax         dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式.       sax: ...