MySQL
2023-03-21 11:01:32 0 举报
AI智能生成
MySQL知识架构
作者其他创作
大纲/内容
略
MySQL的安装与配置
定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括create、drop、alter等。
数据定义语句
DDL(Data Definition Languages)
用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括 insert、delete、update和select等。
数据操纵语句
DML(Data Manipulation Language)
用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。
数据控制语句
DCL(Data Control Language)
SQL分类
SQL基础
数值类型
日期时间类型
字符串类型
数据类型
算数运算符
比较运算符
逻辑运算符
位运算符
运算符的优先级
运算符
字符串函数
数值函数
日期和时间函数
流程函数
其他函数
常用函数
基础篇
MVCC
InnoDB(5.5之后默认)
BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。
BDB(BerkeleyDB)
事务安全
MyISAM{5.5之前默认}
MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。
MERGE
MEMORY存储引擎提供\"内存中\"表。
MEMORY
ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。
ARCHIVE
EXAMPLE存储引擎是一个\"存根\"引擎,它不做什么。
你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在 MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。
EXAMPLE
FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。
FEDERATED
存储引擎把数据以逗号分隔的格式存储在文本文件中。
CSV
BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。
BLACKHOLE
NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。
NDB Cluster
非事务安全
InnoDB与Myisam区别
参考资料
存储引擎
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。
索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都含有逻辑指针,以便加速检索物理数据。
定义
显著减少查询中分组和排序的时间。
加速表与表的连接。
大大提高查询速度。
通过创建唯一索引,保证每一行数据的唯一性。
优点
创建索引需要对表加锁,可能影响表的其他数据操作。
索引需要单独磁盘空间存储,如果创建大量索引,可能会比数据文件更快达到大小上限。
写操作需要维护索引,索引越多耗时越长,影响写操作的效率。
缺点
特点
以单独一列创建的索引。
单列索引
以多个字段组成的索引。
复合索引(联合索引、组合索引)
字段个数
使用主键字段生成的索引,其他都是辅助索引。
主键索引
唯一索引的索引内容不能重复。
唯一索引
以非主键字段生成,又称次级索引、二级索引、普通索引。
辅助索引
基于字段前几个字符或者几个bytes建立的索引。
前缀索引
字段特性
叶子节点data域保存完整数据行记录的就是聚簇索引。
聚簇索引具有唯一性。一个表只有一个聚簇索引。
如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键(row_id隐藏列)来作为聚簇索引。
聚簇索引默认是主键。
聚簇索引
叶子节点data域只保存主键值或数据地址的就是非聚簇索引。
非聚簇索引
聚簇索引与非聚簇索引
是否聚簇
倒排索引
对非结构化数据进行内容精确查找分析的索引。
MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引。
MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引。
只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
关系型数据库不常用,当下流行方案ElasticSearch。
全文索引
B树索引
Hash索引
R索引
数据结构
分类
数组查询时需要将数据加载到内存,数据量大时会占用大量内存。不适合用作索引。
查询时需要全表扫描也不适合数据库数据的查取。
数组
链表查询不用全部载入内存,但仍需要全表扫描,不适合用作索引。
链表
hash索引在查找上具有速度优势,适合缓存数据库这类在直接查询上追求效率的场景。
Hash索引在范围查找场景需要进行全表扫描,不适合经常需要范围分析的数据库。
Hash
在顺序递增或者递减的情况,二叉数据可能退化为链表,查询时需要全表扫描。
二叉搜索树
AVL树
红黑树
平衡二叉树解决了二叉树退化为链表的问题,但每个节点存储一个数据,数据库大量数据的情况下,二叉树的高度会很高,IO次数太多,查询效率较低。
平衡二叉树
二叉树
二叉树不适合做数据库索引,原因在于其高度太高会导致IO次数多,降低查询效率。
在降低查找树高度的思路下,多叉树适合需求场景。
B树的B意为Balance,即指多叉平衡树。与二叉树的区别,也是其能降低树的高度的原因在于,B树允许每个节点有更多的子节点。
前言
B树结构
叶子节点和非叶子节点均存储数据。
关键字只存在于一个节点,即关键字在B树内不重复。
按照索引查询,可能在非叶子节点命中返回。最好情况为O(1)根节点命中。最差需要遍历到叶子节点,查询效率不稳定。
性能接近二分查找。
增删改数据时需要重新维护B树,具体看参考资料
B树
B+树结构
B+树与B树相似,是多路平衡查找树。
非叶子节点只存储关键字,叶子节点存储关键字和数据。
关键字可以重复。
非叶子节点可以看做索引,因为节点中只包含关键字。
数据库具体实现时,叶子节点增加双向指针,提升查询效率。
查询效率稳定,每次查询都需要查到叶子节点才返回,即B+树的高度。
不同B树
B+树
B*树是B+树的扩展,大体相同,部分不同,具体看参考资料
B*树
B树和B+树操作
B树和B+树
直接查询
范围查询
条件查询
读效率
发生写操作时,索引的维护效率。
写效率
查询数据时需要的IO次数。
IO效率
数据库索引评估标准
数组和链表查询时需要进行全表扫描,效率低下。
Hash索引在进行范围和条件查询时需要进行全表扫描,效率低下。对直接查询效率高,适合做缓存索引。
二叉树类型索引,树高度太高,IO次数太多,极大影响查询效率。
B树索引,非叶子节点存储数据,查询效率不稳定,且写操作索引维护复杂度高。
B+树索引,解决了前述各类缺点。且在实际引用中,数据库B+树高度一般为3~4,查询效率稳定。另B+树索引实用中都存储在缓存中,进一步减少IO次数,实际一次查询只需要一次IO,耗时为几十毫秒级别。
综述,B+树是当前最合适做索引的数据结构。
数据结构索引总结
R树是一种空间索引树,分析和解决的是二维及以上维度的索引问题。理解上可类比B树在一维空间的索引原理。
R树索引
数据结构索引分析
扇区
磁盘块
内存页
局部性原理
磁盘预读
InnoDB数据页
专业名词
索引
视图
存储过程
触发器
事务
安全
分区
开发篇
SQL优化
优化数据库对象
锁是协调多个进程或者线程并发访问某一资源的机制。
加全局锁后整个数据库处于只读状态。
FTWRL
flush tables with lock
加锁
ublock tables
解锁
命令
全库逻辑备份
应用
全局锁
表锁
元数据锁(MDL)
意向锁
AUTO-INC锁
种类
开销小,加锁快。
不会出现死锁。
锁粒度大,锁冲突概率最高,并发度最低。
MyISAM
表级锁(table lock)
开销和加锁时间介于表锁和行锁之间。
会死锁。
锁粒度介于表锁与行锁之间,并发度也介于二者之间。
BDB
页面锁(page lock)
Record Lock
Gap Lock
Next-key Lock
开销大,加锁慢。
锁粒度小,锁冲突概率最低,并发度最高。
InnoDB
行级锁(record lock)
MySQL锁的分类
MyISAM表锁
InnoDB的锁
锁
优化MySQL Server
磁盘IO
应用优化
优化篇
慢查询
日志
备份与恢复
权限与安全
监控
运维篇
复制
MySQL Cluster
MMM架构
MHA架构
高可用架构
架构篇
细节重点清晰
mysql
MySQL
开发关注的部分重点
mysql重点
MySQL简要重点
存储引擎归纳细致
mysql存储引擎
MySQL实战原理
MySQL流程图,很精细
MySQL架构设计图
重要知识点的流程图示
流程图
MySQL流程图
Buffer pool
Mysql Buffer Pool
调优
Mysql调优
innodb
Mysql慢查询
详细
理解MySQL
从根儿上理解MySQL
参数优化
MySQL参数优化
执行流程
MySQL语句执行流程
MySQL索引B+树数据结构
《深入浅出MySQL:数据库开发、优化与管理维护》
书籍
0 条评论
下一页