基础

时间类型
经验
设计
DDL、DML、DCL、MDL、WAL
Mysql insert语句类型
innodb_large_prefix
Mysql事务隔离级别
undo log|redo log
MVCC
innodb 底层技术
InnoDB Buffer Pool 浅析
Mysql各种日志和缓冲区

常规字段

列类型
需要的存储量
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来执行查询。
  • 将结果返回给客户端。
notion image

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...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP