一 为什么需要数据库连接池
每一个线程都需要通过JDBC驱动去和数据库建立网络连接,然后执行SQL,SQL执行完毕,线程销毁,如果并发量很大的时候,就需要不同的建立网络连接,然后销毁连接,并且建立网络连接也是需要耗时的,所以效率低下。所以使用数据库连接池,可以循环利用数据库连接。
二 数据库MySQL的架构
MySQL服务器架构主要分为三层:应用层、逻辑层和物理层。
应用层:主要负责和客户端进行交互,建立连接,响应请求
逻辑层:主要负责SQL查询、事务管理、恢复等
物理层:主要负责写日志和数据
MySQL架构下,大致查询流程:
#1 工作线程从连接器获取SQL数据
#2 工作线程把SQL语句交给SQL接口
#3 SQL接口先从查询缓存看要查询的SQL语句是否命中
查询缓存一般不启用,启用也不会给太大,几十兆就够了,尤其是表增删改比较频繁;另外SELECT语句包含一些变化的函数比如时间戳等也不会缓存
#4 如果没有命中则通过SQL解析器,解析SQL语句,然后将解析的SQL语句根据语法规则构建语法树。
#5 将语法树交给查询优化器,查询优化器可能生成多条执行计划,然后选择最优的一条,或者成本最优的那条数据
#6 SQL执行器执行SQL执行计划,调用存储引擎进行查询