mysql 高性能日期比较_Mysql高性能总结

Mysql架构和历史

逻辑架构

26d16896bd61f22ed9ea7b6b7f89c2e6.png

并发控制

锁分类:

共享锁 读锁

排它锁 写锁

锁策略:

表级锁

行级锁

注:存储引擎自己实现锁机制

事务

ACID理解:原子性、一致性、隔离性、持久性

隔离级别:

RU(读未提交):脏读、不可重复读、幻读

RC(读已提交):不可重复读、幻读

RR(可重复读):幻读

S(可串行化):加锁读

注:Mysql默认隔离级别为:RR,通过mvcc(多版本控制)解决幻读

事务是由存储引擎实现的

死锁

死锁是两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。

注:Innodb处理死锁的方法是,将持有最少行级排它锁的事务进行回滚

数据类型与Schema优化

数据类型的选择

更小的通常更好

简单更好

尽量避免NULL

举例:

使用Mysql内建的类型而不是字符串存储日期和时间

用整型存储IP地址

尽量避免使用null,索引字段不能为NULL

DATETIME和TIMESTAMP的区别

Schema的设计

避免太多的列(宽表)

避免太多的关联

枚举少用

尽量避免使用null

范式和反范式相结合

创建高性能的索引

在mysql中索引是在存储引擎层而不是在服务器层实现的,且各存储引擎对相同索引的实现也不一样

数据和索引的统计信息放在存储引擎中

索引分类

底层实现:

B-Tree索引

哈希索引

功能:

主键索引

普通索引

唯一索引

组合索引

索引的优点

大大减少了服务器需要扫描的数据量

可以帮助服务器避免排序和临时表

可以将随机I/O变为顺序I/O

索引策略

独立的列(不能是表达式的一部分或函数的参数)

最左前缀和索引选择性

聚簇索引

d53fb65b3be7d31f8093586fd2b167be.png

覆盖索引

使用索引扫描来做排序

冗余和重复索引

索引和锁

InnoDB在二级索引上使用共享(读)锁,但在主键索引上使用排它(写)锁

总结

单行访问是很慢的

按顺序访问范围数据是很快的

索引覆盖查询是很快的

查询性能优化

优化数据访问

是否向数据库请求了不需要的数据

是否在扫描额外的记录

重构查询的方式

复杂查询or多个简单查询

切分查询

分解关联查询

查询执行的基础

646438fc89aa35f365b90296661f7ba5.png

Mysql客户端/服务端通信协议

半双工

查询状态 Show full processlist

Sleep:

Query:

Locked:

Analyzing and statistics:

Copying to tmp table:

Sorting result:

Sending data:

查询缓存

通过对一个大小写敏感的哈希查找实现的

查询优化处理

语法解析器:校验语法

预处理器:校验字段、

查询优化器:将语法树转化成执行计划,是一个很复杂的过程

查询执行引擎

返回结果给客户端

查询优化器的局限性

查询优化器的提示

优化特定类型的查询

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值