mysql优化

廉价感情. 提交于 2020-01-01 12:57:29
MySQL逻辑架构(B/S结构)

在这里插入图片描述
MySQL逻辑架构整体分为三层 :

  • 客户端 : 并非MySQL所独有,诸如 : 连接处理、授权认证、安全等功能均在这一层处理
  • 核心服务 : 包括查询解析、分析、优化、缓存、内置函数(比如 : 时间、数学、加密等函数),所有的跨存储引擎的功能也在这一层实现 : 存储过程、触发器、视图等
  • 存储引擎 : 负责 MySQL 中的数据存储和提取,和 Linux 下的文件系统类似,每种存储引擎都有其优势和劣势,中间的服务层通过 API 与存储引擎通信,这些 API接口 屏蔽不同存储引擎间的差异

具体的逻辑架构如下所示:
在这里插入图片描述

我们可以看到和我们的应用架构类似
都有连接池,缓存,内存管理,网络交互,访问控制等

MySQL查询过程

在这里插入图片描述
把上面的查询过程结合服务层架构的各个模块来看
MySQL 整个查询执行过程,总的来说分为 5 个步骤 :
1> 客户端向 MySQL 服务器发送一条查询请求,mysql会使用连接池进行连接
2> 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段
3> 服务器进行 SQL解析、预处理、再由优化器生成对应的执行计划
4> MySQL 根据执行计划,调用存储引擎的 API来执行查询
5> 将结果返回给客户端,同时缓存查询结果

影响性能的因素:

定位性能问题永远要从宏观层面去查看问题,发现问题之后在需要从微观层面考虑如何优化

数据库之外:
1.人为因素-需求
count(*) 当数据量过大的时候是否需要显示全部数量
然后如果需要的话,myisam是存储表的总数的,innodb是没有的,需要进行全表扫描,那么我们是否可以找一个地方用非实时的方式记录表的数量
2.程序员因素
对SQL进行优化,表结构设计要合理
3.cache
外部的cache设计的不好,导致很多可以缓存的查询结果打到数据库

4.应用场景
OLTP on-line transaction processing 联机事务处理
OLAP on-line analysis processing 联机分析处理

数据库之内:
1.索引
索引是一种数据结构,那具体是那种数据结构呢?
常见的数据结构:
Hash(无法进行范围查询)
FullText
R-Tree(空间索引,例如:周围三公里的商家)
B+tree(数据库索引,树的高度不会太高)

  • myisam 的索引树不存储数据,只存储指向数据结构文件的指针,这也是为什么需要多个文件的原因
  • innodb是使用主键来组织索引树的,树的节点会存储数据,因此只需要一个文件

2.cache

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!