数据类型 | 大小 | 范围 | 说明 |
---|---|---|---|
tinyint | 1个字节 | 有符号(-128 到127),无符号(0到255) | 默认为有符号 |
int | 4个字节 | 有符号(- 2^23 ~ 2^23 – 1) | 默认为有符号 |
bigint | 8个字节 | 有符号(-2^63 ~ 2^63 - 1) | 默认为有符号 |
float | 4字节 | 有符号(- 2^23 ~ 2^23 – 1) | 单精度浮点 |
double | 8字节 | 双精度浮点 | |
decimal | 不确定 | 不确定 | 精确计算 |
数据类型 | 大小 | 说明 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-65535字节 | 变长字符串 |
tinyblob | 0-255字节 | 小二进制字符串 |
tinytext | 0-255字节 | 小文本字符串 |
blob | 0-65535字节 | 二进制字符串 |
text | 0-65535字节 | 文本字符串 |
mediumblob | 0-(2^24-1)字节 | 中等二进制字符串 |
mediumtext | 0-(2^24-1)字节 | 中等文本字符串 |
longblob | 0-(2^32-1)字节 | 大二进制字符串 |
longtext | 0-(2^32-1)字节 | 大文本字符串 |
值也可以是空串(“”) 或 NULL
>- ENUM和CHAR(VARCHAR)类型关联查询,会慢一些,因此,假如预先知道某列需要与CHAR类型关联,那么就不应该将该列设置为ENUM类型 >- ENUM类型的列可有效缩小表所占的空间,书中写可缩小1/3
数据类型 | 大小 | 格式 | 说明 |
---|---|---|---|
date | 3字节 | YYYY-MM-DD | 日期值 |
datetime | 8字节 | YYYY-MM-DD HH:MM:SS | 时间和日期值 |
timestamp | 4字节 | YYYYMMDDHHMMSS | 时间戳 |
在范式话数据库中,每个事实数据会出现并且只出现一次。相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地方。
范式的优点:
范式的更新要比反范式的更新要快,但是这样就需要更多的关联,使查询效率降低.
有时挺升性能最好的办法是在同一张表中保存衍生的冗余数据,有时也需要创建一张完全独立的汇总表或缓存表。我们使用缓存表来存储哪些可以比较简单地从schema其他表获取数据的表,汇总表保存的是使用GROUP BY语句聚合数据的表。 缓存表对优化搜索和检索查询语句很有效。可以对缓存表使用不同的存储引擎。 当重建汇总表和缓存表时,通常需要保证数据在操作时依然可用。这需要使用影子表。影子表指的是一张在真实表背后创建的表。当完成建表操作后,可以通过一个原子命名操作切换影子表和原表。 CREATE TABLE t2 AS SELECT * FROM t1; //只有表结构和数据,没有索引,注释,序列等 CREATE TABLE t2 LIKE t1;//有完整的表结构,但是没有数据
物化视图实际上是预先计算并且存储在磁盘上的表,可以通过各种各样的策略刷新和更新。MySQL并不支持物化视图。可以使用Flexviews,它由下面几个部分组成。 变更数据抓取(change data capture, CDC)功能,可以读取服务器的二进制日志并且解析相关行的变更 一系列可以帮助创建和管理试图的定义的存储过程 一些可以应用变更到数据库中国年的物化视图的工具 相比传统的维护汇总表和缓存表的方法,Flexviews通过提取对源表的更改,可以增量地重新计算物化视图的内容。
创建一张独立的表存储技术器可以帮助避免查询缓存实效,并且可以使用本节展示的一些更高级的技巧。例如在高并发下,可以将计数器保存在多行,每次随机选择一行进行更新。
MySQL执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查处所有数据插入新表,然后删除旧表。大部分ALTER TABLE会导致MySQL服务中断。可以通过两个技巧:一种是先在一台不提供服务的机器上执行ALTER TABLE操作,然后和提供服务的主库进行切换;另一种技巧是影子拷贝。影子拷贝的技巧是用要求的表结构创建一张和源表无关的新表,然后通过重命名和删表操作交换两张表。 更改表可以通过ALTER COLUMN修改表中的列,这个命令直接修改.frm文件,因此速度很快。也可以直接修改.frm来改动表达到不新建一张表的目的;修改.frm只适用以下几种方式:
基本的技术是为想要的表结构创建一个新的.frm文件,然后用它替换已经存在的那张表的.frm,步骤如下: