一条Mysql查询语句的西天取经之路,你

数据库,大家都不陌生,这是程序员的基本技能了。当然,我们更多时候只是去了解如何使用数据库,而对数据库一些底层原理却比较陌生,今天我们来了解一下,一条数据库查询语句的取经之路。

基本分层

个人认为,Mysql数据库可以分为3层,连接层,逻辑层,与数据存储层。

连接层

首先是连接层,连接层,可以理解为天庭城门的城门守卫,负责与客户端建立连接与鉴权。在一条查询服务发生之前,客户端必须先通过TCP链接与Mysql数据库建立连接,这个时候,连接层就会校验连接的账号跟密码,以及所操作的数据库是否有权限,如果没有权限,或者只有读权限却使用了写命令,那么拒绝对方进入,并返回错误码。为了数据库的性能,节约系统资源,当长连接数量超过一定限制或者对应客户端超时,都会被强制断开,需要下一次重连。

逻辑层

数据库的逻辑层,主要包括这么几个东西,首先是缓存层,哈哈,可能很多人还不知道,Mysql是有缓存的!但是,Mysql的缓存我们很少使用,因为Mysql的缓存是这样的,以查询语句为key,以查询结果为value,一旦表发生更新,那么,缓存就会失效,需要重新刷新。除非是极限的多读少写场景,不然都会开销非常大,但是这种多读少写的场景,我们一般都是业务自己做内存缓存了,还减少一次RPC的时间。紧接着便是语法分析层,要知道,唐僧是东土大唐的和尚,西天在印度,话语肯定是不通的,这就需要进行翻译了,语法分析层干的正是这个工作。通过语法分析,将Mysql查询语句翻译成机器理解的语句,这个时候,如果发现语法错误,那么就会重新打回,告诉客户端语法错误了,需要进行修改后再次查询。接下来便是优化器,大家知道,西天藏经阁的经书千千万万,需要知道唐僧要的经书在哪里。这便是优化器的作用,最简单的,优化器会根据索引进行更优的选择,除此之外,一些join语句,优化器也可以判断出先从哪张表中选择会更加高效。最后便是执行器,也就是去取经书的和尚,负责与存储层的交互逻辑。

存储层

存储层,便是藏经阁了。Mysql的存储层,有着若干种不同的存储引擎,各个引擎各有优劣。存储层会将执行器传说过来的指令进行执行,然后合并出最后的执行结果,最终输出结果。

总结

好了,今天我们对Mysql的查询语句介绍就到这里,一句简单的查询语句,在Mysql内部实际上流转过数个模块。后面有机会,我们再继续讲解Mysql里面的各种设计,欢迎大家


转载请注明:http://www.aierlanlan.com/rzfs/5670.html