基础
常规字段
列类型 | 需要的存储量 |
TINYINT | 1 字节 |
SMALLINT | 2 个字节 |
MEDIUMINT | 3 个字节 |
INT | 4 个字节 |
INTEGER | 4 个字节 |
BIGINT | 8 个字节 |
FLOAT(X) | 4 如果 X < = 24 或 8 如果 25 < = X < = 53 |
FLOAT | 4 个字节 |
DOUBLE | 8 个字节 |
DOUBLE PRECISION | 8 个字节 |
REAL | 8 个字节 |
DECIMAL(M,D) | M 字节(D +2 , 如果M < D ) |
NUMERIC(M,D) | M 字节(D +2 , 如果M < D ) |
日期和时间
列类型 | 需要的存储量 |
DATE | 3 个字节 |
DATETIME | 8 个字节 |
TIMESTAMP | 4 个字节 |
TIME | 3 个字节 |
YEAR | 1 字节 |
Blob长度
BLOB
最大可为65535字节(64 KB)。MEDIUMBLOB
for 16777215 byte (16 MB)LONGBLOB
for 4294967295 byte (4 GB)Mysql Text长度
对于utf-8:一个中文占三个字符,一个英文占一个字符
对于GBK:一个中文占两个字符,一个英文占一个字符
有前面两个知识点总结一下就是
如果使用的是utf-8 ,text并不能存65535个中文字符而是 65535/3 = 21845 即text只能存21845个文字。GBK同理。
- 使用text时千万要注意,防止超长如不够用了可以使用mediumtext或者longtext
TINYTEXT | 256 bytes | |
TEXT | 65,535 bytes | ~64kb |
MEDIUMTEXT | 16,777,215 bytes | ~16MB |
LONGTEXT | 4,294,967,295 bytes | ~4GB |
存储引擎选择
特点 | InnoDB | MyISAM | MEMORY | MERGE | NDB |
存储限制 | 64TB | 有 | 有 | 没有 | 有 |
事务安全 | ==支持== | ㅤ | ㅤ | ㅤ | ㅤ |
锁机制 | ==行锁(适合高并发)== | ==表锁== | 表锁 | 表锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | ㅤ | ㅤ | 支持 | ㅤ | ㅤ |
全文索引 | 支持(5.6版本之后) | 支持 | ㅤ | ㅤ | ㅤ |
集群索引 | 支持 | ㅤ | ㅤ | ㅤ | ㅤ |
数据索引 | 支持 | ㅤ | 支持 | ㅤ | 支持 |
索引缓存 | 支持 | 支持 | 支持 | 支持 | 支持 |
数据可压缩 | ㅤ | 支持 | ㅤ | ㅤ | ㅤ |
空间使用 | 高 | 低 | N/A | 低 | 低 |
内存使用 | 高 | 低 | 中等 | 低 | 高 |
批量插入速度 | 低 | 高 | 高 | 高 | 高 |
支持外键 | ==支持== | ㅤ | ㅤ | ㅤ | ㅤ |
以下是几种常用的存储引擎的使用环境。
- InnoDB : 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包含更新、删除操作,那么InnoDB存储引擎是比较合适的选择。InnoDB存储引擎除了有效的降低由于删除和更新导致的锁定, 还可以确保事务的完整提交和回滚,对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB是最合适的选择。
- MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
- MEMORY:将所有数据保存在RAM中,在需要快速定位记录和其他类似数据环境下,可以提供极快的访问。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。
执行流程
- 客户端发送一条查询给服务器。
- 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
- 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。
- MySQL根据优化器生成的执行计划,再调用存储引擎的API来执行查询。
- 将结果返回给客户端。
explain
字段 | 含义 |
id | select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。 |
select_type | 表示 SELECT 的类型,常见的取值有 SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION 中的第二个或者后面的查询语句)、SUBQUERY(子查询中的第一个 SELECT)等 |
table | 输出结果集的表 |
partitions | 匹配的分区 |
type | 表示表的连接类型,性能由好到差的连接类型为( system ---> const -----> eq_ref ------> ref -------> ref_or_null----> index_merge ---> index_subquery -----> range -----> index ------> all ) |
possible_keys | 表示查询时,可能使用的索引 |
key | 表示实际使用的索引 |
key_len | 索引字段的长度 |
rows | 扫描行的数量 |
filtered | 按表条件过滤的行百分比 |
extra | 执行情况的说明和描述 |
Loading...