SQL语句的执行过程
admin
2023-05-16 15:22:30
0

1.语法校验

      如果在SQL计划缓存中没有对应的执行计划,服务器首先会对用户请求的SQL语句进行语法效验,如果有语法错误,服务器会结束查询操作,并用返回相应的错误信息给调用它的应用程序。

注意:此时返回的错误信息中,只会包含基本的语法错误信息,例如select 写成selec等,错误信息中如果包含一列表中本没有的列,此时服务器是不会检查出来的,因为只是语法验证,语义是否正确放在下一步进行。


2.检查语义

      语法符合后,就开始验证它的语义是否正确。例如,表名、列名、存储过程等等数据库对象是否真正存在,如果发现有不存在的,就会报错给应用程序,同时结束查询。


3.获得对象的解析锁

     接下来就是获得对象的解析锁,我们在查询一个表时,首先服务器会对这个对象加锁,这是为了保证数据的统一性,如果不加锁,此时有数据插入,但因为没有加锁的原因,查询已经将这条记录读入,而有的插入会因为事务的失败会回滚,就会形成脏读的现象。


4.用户访问权限认证

     接下来就是对数据库用户权限的验证。SQL语句语法,语义都正确,此时并不一定能够得到查询结果,如果数据库用户没有相应的访问权限,服务器会报出权限不足的错误给应用程序,在稍大的项目中,往往一个项目里面会包含好几个数据库连接串,这些数据库用户具有不同的权限,有的是只读权限,有的是只写权限,有的是可读可写,根据不同的操作选取不同的用户来执行。稍微不注意,无论你的SQL语句写的多么完善,完美无缺都没用。


5.SQL优化,选择最高效的查询算法

       解析的最后一步,就是确定最终的执行计划。当语法、语义、权限都验证后,服务器并不会马上给你返回结果,而是会针对你的SQL进行优化,选择不同的查询算法以最高效的形式返回给应用程序

例如在做表联合查询时,服务器会根据开销成本来最终决定采用hash join,merge join ,还是loop join,采用哪一个索引会更高效等等。不过它的自动化优化是有限的,要想写出高效的查询SQL还是要优化自己的SQL查询语句。

当确定好执行计划后,就会把这个执行计划保存到SQL计划缓存中,下次在有相同的执行请求时,就直接从计划缓存中取,避免重新编译执行计划。


相关内容

热门资讯

飞沃科技获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示飞沃科技(301232)新获得一项实用新型专利授权,专利名为“...
段永平的“本分”哲学,被OPP... 短短几十字的母亲节宣传文案,把OPPO推上了风口浪尖。 5月8日,手机品牌OPPO的官方微博、小红书...
百余家科创企业齐聚新疆 探索人... 乌鲁木齐5月15日电 (胡嘉琛)与机器人踢足球、遛机器狗……刚果(金)在华留学生基韦尼15日在乌鲁木...
山西一辆载有学生车辆侧翻,已致... 记者16日从山西省晋中市委宣传部获悉,16日上午,山西省晋中市左权县一载有学生的车辆发生侧翻,目前已...
研究生骗了医院1400万!根本... 通过虚开发票、冒名签名等方式,90后医学生套取医院科研经费达1426.828998万元。撰文丨凌骏一...
世佳博科技取得焊接板双面夹紧装... 国家知识产权局信息显示,北京世佳博科技集团有限公司取得一项名为“一种焊接板双面夹紧装置”的专利,授权...
别再被“无限流量”忽悠了!20... 你是不是也遇到过——租房搬家没宽带,出差开会网卡成PPT,或者买了个“随身WiFi”结果三天两头断流...
贵州正式迈入3000M超千兆智... 快科技5月16日消息,贵州移动昨日在贵阳召开发布会,联合华为、多彩新媒等企业,正式推出超千兆智能网服...
燃气热水器排烟管可以向下排吗 要知道排烟管向下排放是绝对不允许的,因为这样会增加阻力,然后会减少换热和产品的使用寿命,所以切记,排...