查询过程
1)客户端首先通过客户端/服务器通信协议与mysql服务器建立起连接
2)客户端发送一条sql语句
判断是否为查询语句,如果是查询语句,则先在查询缓存区哈希查找对应sql的数据,如果查询之前已经执行过了,则将会命中缓存,返回对应的数据,否则将继续执行3) 4) 5) 6)
查询缓存位于本机内存中,这样如果命中了缓存,就不需要从磁盘查询数据了,从内存查询的效率要比从磁盘查询的效率高
3)第一次解析 检查解析的sql是否有语法错误
4)第二次解析 检查解析的sql的表名、字段名是否正确
5)查询优化器生成执行计划,查询优化器的作用是为sql语句选取合适的索引或者不使用索引
查询优化器中也有缓存(cache),会缓存sql语句的执行计划,当然执行计划会随着表结构和表数据的变化而变化,这时,这个执行计划将失效(evict)。在进行sql执行过程中,系统自动优化的方式有时候并不是最优的,这就需要我们强制使用指定索引来提高查询效率
eg:
select * from table force index(index_name)
6)将执行计划交给存储引擎执行
7)将查询到的结果缓存到查询缓存中,在从查询缓存中返回数据给客户端
网友评论