《高性能MYSQL》——Schema与数据类型优化

良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计schema。缓存

1、选择优化的数据类型性能

选择数据类型的原则优化

一、更小的一般更好spa

通常状况下,应该尽可能使用能够正确存储数据的最小数据类型。更小的数据类型一般更快,由于它们占用更小的磁盘、内存和CPU缓存,而且处理时须要的CPU周期也更少。设计

二、简单就好排序

简单数据类型的操做一般须要更少的CPU周期。索引

三、尽可能避免NULL内存

查询中包含可为NULL的列对MYSQL来讲更难优化,由于可为NULL的列使得索引、索引统计和值比较都更复杂。字符串

整数类型class

若是存储整数,可使用这几种整数类型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT分别使用8, 16, 24, 32, 64位存储空间。整数类型有可选的UNSIGNED属性,表示不容许负值,这大体可使正数的上限提升一倍。有符号和无符号类型使用相同的存储空间,并具备相同的性能,所以能够根据实际状况 选择合适的类型。

实数类型

实数是带有小数部分的数字。然而,它们不仅是为了存储小数部分、也可以使用 DECIMAL存储比BIGINT还大的整数。MySQL既支持精确类型,也支持不精确类型。

FLOATDOUBLE类型支持使用标准的浮点运算进行近似计算。

DECIMAL类型用于存储精确的小数。

浮点类型在存储一样范围的值时,一般比DECIMAL使用更少的空间。FLOAT使用4个字 节存储。DOUBLE占用8个字节,相比FLOAT有更高的精度和更大的范围。

字符串类型

VARCHARCHAR类型

VARCHARCHAR是两种最主要的字符串类型。

VARCHAR类型用于存储可变长字符串,是最多见的字符串数据类型。它比定长类型 更节省空间,由于它仅使用必要的空间(例如,越短的字符串使用越少的空间)。

CHAR类型是定长的:MySQL老是根据定义的字符串长度分配足够的空间。CHAR适合存储很短的字符串,或者全部值都接近同一个长度。

BLOBTEXT类型

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

日期和时间类型

DATETIME

这个类型能保存大范围的值,从1001年到9999年,精度为秒。它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中与时区无关。使用8个字节的存储空间。

TIMESTAMP

TIMETAMP类型保存了从197011日午夜(格林尼治标准时间)以来的秒数,它和UNIX时间戳相同。TIMESTAMP只使用4个字节的存储空间。

2、范式与反范式

范式的优势和缺点

优势:

范式化的更新操做一般比反范式化要快。

当数据较好地范式化时,就只有不多或者没有重复数据,因此只须要修改更少的数据。

范式化的表一般更小,能够更好地放在内存里,因此执行操做会更快。

缺点:

范式化设计的schema的缺点是一般须要关联。稍微复杂一些的査询语句在符合范式的 schema上均可能须要至少一次关联,也许更多。

反范式的优势和缺点

优势:

反范式化的schema由于全部数据都在一张表中,能够很好地避免关联。

能够设计有效的索引。

缺点:

表中的数据冗余较多,删除数据时候会形成表有些有用的信息丢失。

混用范式化和反范式化

事实是,彻底的范式化和彻底的反范式化schema都是实验室里才有的东西:在真实 世界中不多会这么极端地使用。在实际应用中常常须要混用,可能使用部分范式化的 schema缓存表,以及其余技巧。

最多见的反范式化数据的方法是复制或者缓存,在不一样的表中存储相同的特定列。

3、缓存表和汇总表

存表表示存储那些能够比较简单地从schema其余表获取(可是每次获取的速度比较慢)数据的表(例如, 逻辑上冗余的数据)。

汇总表表示那些使用GROUP BY语句聚合数据的表(例 如,数据不是逻辑上冗余的)。

4、schema设计原则

  • 尽可能避免过分设计,例如会致使极其复杂査询的schema设计,或者有不少列的表设 计(不少的意思是介于有点多和很是多之间)。
  • 使用小而简单的合适数据类型,除非真实数据模型中有确切的须要,不然应该尽量地避免使用NULL值。
  • 尽可能使用相同的数据类型存储类似或相关的值,尤为是要在关联条件中使用的列。
  • 注意可变长字符串,其在临时表和排序时可能致使悲观的按最大长度分配内存。
  • 尽可能使用整型定义标识列。
  • 避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度。
  • 当心使用ENUMSET虽然它们用起来很方便,可是不要滥用,不然有时候会变成 陷阱。最好避免使用BIT.
相关文章
相关标签/搜索