求数据库高手帮忙!
我想了解一条SQL语句从客户端发到服务器后,到最后消失的过程,服务器又是怎么处理这条语句的等等谢谢!...
我想了解一条SQL语句从客户端发到服务器后,到最后消失的过程,服务器又是怎么处理这条语句的等等 谢谢!
展开
展开全部
第一步:客户端把语句发给服务器端执行。(客户端用C表示,服务器端用S表示)
当在C执行SQL语句时,它先发给S,让S端启动操作系统进程来处理这条SQL语句,因此C只是简单的启动一个进程把SQL语句发给S端处理,等待服务器端返回。
第二步:S端对SQL进行解析:
1、查询高速缓存,查找是否存在相同的执行计划,如果存在,则直接从内在中读取数据返回。如果不存在,则继续下一步:
2、语句合法性检查:即语法规则检查,如果不符合则返回错误给C端,否则进行下一步
3、语言含义检查:检查字段,表,视图等这些数据库对象是否存在或准确,如果不符合则返回错误给C,否则下一步;
4、获得对象解析锁:对处理的数据库对象加锁,主要是保障数据的一致性,防止在处理过程中并发产生时引起数据的不一致;
5、数据访问权限核对,检查连接的用户是否有这个数据访问的权限,如果没有则返回错误信息,否则下一步;
6、确定最佳执行计划:S端根据一定的算法,对语句进行优化以确定它的执行计划,再把SQL语句与这个执行计划保存到数据的调整缓存中,如此,以后还有相同的处理时,则直接省略上述的2-6个,直接执行SQL语句,提高效率。
第三步:语句执行
若被处理的数据已经被读取到数据缓冲区中,则S端进程会直接把这个数据发到C,而不再去数据库文件中查找,否则S进程会从数据库文件中查询处理相关数据,并把这个数据放到数据缓冲区中
第四步:提取数据:
在S的进程中,会有一个专门负责数据提取的一段代码,专门把查询处理好的数据返回C,从而完成整个过程。
当在C执行SQL语句时,它先发给S,让S端启动操作系统进程来处理这条SQL语句,因此C只是简单的启动一个进程把SQL语句发给S端处理,等待服务器端返回。
第二步:S端对SQL进行解析:
1、查询高速缓存,查找是否存在相同的执行计划,如果存在,则直接从内在中读取数据返回。如果不存在,则继续下一步:
2、语句合法性检查:即语法规则检查,如果不符合则返回错误给C端,否则进行下一步
3、语言含义检查:检查字段,表,视图等这些数据库对象是否存在或准确,如果不符合则返回错误给C,否则下一步;
4、获得对象解析锁:对处理的数据库对象加锁,主要是保障数据的一致性,防止在处理过程中并发产生时引起数据的不一致;
5、数据访问权限核对,检查连接的用户是否有这个数据访问的权限,如果没有则返回错误信息,否则下一步;
6、确定最佳执行计划:S端根据一定的算法,对语句进行优化以确定它的执行计划,再把SQL语句与这个执行计划保存到数据的调整缓存中,如此,以后还有相同的处理时,则直接省略上述的2-6个,直接执行SQL语句,提高效率。
第三步:语句执行
若被处理的数据已经被读取到数据缓冲区中,则S端进程会直接把这个数据发到C,而不再去数据库文件中查找,否则S进程会从数据库文件中查询处理相关数据,并把这个数据放到数据缓冲区中
第四步:提取数据:
在S的进程中,会有一个专门负责数据提取的一段代码,专门把查询处理好的数据返回C,从而完成整个过程。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询