通常,数据库就如同一个黑匣子,我们输入 SQL 语句给它,它负责反馈执行结果给我们。尤其是 SQL 又是一种入门极简单的语言,使用者只要能看懂英语就能熟练写出增删改查的简单语句,对于刚入门的用户来说肯定感觉是极好的。
在数据量比较少时,用户对数据库操作得比较随意,数据库也不会提出反对意见。但是随着数据量的增加,若是再胡乱地拼凑几个查询,并期望数据库给出一个完美的结果,那只能一首《凉凉》送给你——数据库罢工了。这时用户会查阅手册或者咨询一些资深的 DBA,期望得到一个“合理的解释”,但往往针对特定问题只能得到特定解决方案,下次遇到其他状况仍旧无从下手。
所谓求人不如求己,若用户对一个 SQL 语句进入数据库究竟经历了怎样的历程了如指掌,则可以在书写 SQL 的时候就避免 freestyle,即使遇到问题也能胸有成竹地解决。既然前景如此美好,让我们就从最简单的一个 SQL 语句开始看看,一个 SQL 语句在进入数据库之后,到底经历了什么。
语法分析
要查询一个表中的一部分数据,用最简单的 SELECT 查询就可以了:
SELECT * FROM TEST_A;
这是一个单表查询语句,SELECT 告诉我们这是一个查询操作,FROM TEST_A 告诉我们 TEST_A 是要查询的表,而“*”则表示要输出的内容是 TEST_A 表的所有列的内容。
当用户将语句输入客户端工具(比如 psql)之后,客户端工具会将这个语句发送给数据库服务器,这时候 SQL 语句就进入了黑匣子里面,那么黑匣子如何处理它呢?
首先,黑匣子会通过 Lex 工具对 SQL 语句进行词法分析并产生 token,这些 token 都带有固
本文详细介绍了SQL语句在数据库中的处理过程,包括语法分析、语义分析、查询重写和优化器的工作原理。从一个简单的SELECT查询开始,通过词法分析和语法分析形成语法树,然后进行语义分析以获取表的元数据,接着是查询重写,如视图的处理。优化器对查询树进行逻辑和物理优化,选择最佳执行计划。通过理解这一过程,用户可以更好地编写高效SQL语句并解决性能问题。
订阅专栏 解锁全文
137

被折叠的 条评论
为什么被折叠?



