目录
一:MySQL架构与历史
MySQL最重要,最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。
1.1:MySQL逻辑架构


优化与执行
MySQL会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。
优化器并不关心表使用什么存储引擎,但存储引擎对于优化查询是有影响的
1.2:并发控制
1:读写锁


2:锁粒度

问题是加锁也需要消耗资源。锁的各种操作,都会增加系统的开销。吴国花费大量的时间来管理锁,而不是存取数据,那么系统的性能会收到影响

mysql提供了多种选择,每种mysql存储引擎都可以实现自己的锁策略和锁粒度
3:表锁

4:行锁

1.3:事务

ACID
原子性,一致性,隔离性,持久性

隔离级别


事务日志

MySQL中的事务


隐式和显示锁定


1.4:多版本并发控制


二:schema与数据类型优化
良好的逻辑设计和物理设计是高性能的基石,应该根据系统要执行的查询语句来设计schema,这往往需要权衡各种因素。
例如反范式的设计 和计数表,汇总表的添加。
1:选择优化的数据类型
几个简单的原则:
- 更小的通常更好
一般情况下,尽可能的选择可以正确存储数据的最小数据类型。更小的数据类型通常更快,因为它们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期也更少。但是要确保没有低估需要存储的值的范围。
- 简单就好
简单的数据类型的操作通常需要更少的CPU周期
- 尽量避免NULL
列属性可为NULL是一个默认的属性,但是最好指定列NOT NULL,除非真的需要存储NULL值,因为包含NULL的列,在查询中对于MySQL来说更难优化,因为可为NULL的列使得索引,索引统计和值比较都更复杂。
1.1:整数类型
有两种类型的数字:整数 和 实数。整数是其中之一
整数的数据类型:
- TINYINT 8位
- SMALLINT 16位
- MEDIUMINT 24位
- INT 32位
- BIGINT 62位
它们可以存储的值的范围是-2(n-1)到2(n-)-1,其中n是存储空间的位数.
可选用的属性:UNSIGNED。表示不允许有负值,这可以使得正数的上限提高一倍。
1.2:实数类型
实数是带有小数部分的数字。
float和double类型支持使用标准(原生)的浮点近似计算。
decimal类型用于存储精确的小数
由于CPU不支持对DECIMAL的直接计算,所以MySQL5.0后,MySQL服务器自己实现了DECIMAL的高精度计算。相对而言,CPU直接支持的原生浮点计算更快一些。
指定精度:decimal(18,9)表示一共18位数字,小数点后9位。
1.3:字符串类型
在innodb中
varchar:
存储可变长字符串,比定长类型更节省空间。varchar需要使用1或者2个额外的字节记录字符串的长度:如果列的最大长度小于等于255字节,则只用一个字节表示,否则使用两个字节表示。
char:
BLOB与TEXT:
1.4:枚举
枚举:
1.5:日期和时间类型
日期和时间类型
三:创建高新能的索引
索引是存储引擎用于快速查找到记录的一种数据结构
1:索引基础
在MySQL中,存储引擎在使用索引查询时,先根据索引找到对应值,然后根据匹配的索引记录找到对应的数据和。

















3万+

被折叠的 条评论
为什么被折叠?



