处理 SQL 语句
在讨论以编程方式使用 SQL 的技术之前,必须讨论如何处理 SQL 语句。 所涉及的步骤适用于所有三种方法,尽管每种方法执行这些步骤的时间不同。 下图显示了处理 SQL 语句所涉及的步骤,本部分的其余部分对此进行了讨论。
若要处理 SQL 语句,DBMS 将执行以下五个步骤:
首先,DBMS 会分析 SQL 语句。 它将语句拆分为单个单词(称为符号单位),确保语句具有有效的谓词和有效子句等等等。 此步骤可以检测到语法错误和拼写错误。
第二步,DBMS 会验证该语句。 它会根据系统目录检查语句。 该语句中命名的所有表是否都存在于数据库中? 所有列是否都存在并且列名是否明确? 用户是否具有执行该语句所需的权限? 此步骤可以检测到某些语义错误。
第三步,DBMS 会为该语句生成访问计划。 访问计划是执行语句所需步骤的二进制表示形式;它相当于 DBMS 中的可执行代码。
第四步,DBMS 会优化访问计划。 它将探索执行访问计划的各种方法。 索引是否有利于加快搜索速度? DBMS 究竟应该先将搜索条件应用于表 A,然后将其加入表 B,还是应该先加入,再使用搜索条件? 能否避免对表进行顺序搜索,或将搜索范围减少到表的部分内容? 在探索各种替代方法之后,DBMS 会选择其中一个方法。
第五步,DBMS 将通过运行访问计划来执行该语句。
用于处理 SQL 语句的步骤因所需数据库访问量和所需时间而异。 分析 SQL 语句不需要访问数据库,并且可以快速完成。 另一方面,优化是一个占用大量 CPU 资源的过程,并且需要访问系统目录。 对于复杂的多表查询,优化器可能会探索数千种不同的方法来执行同一查询。 但是,执行低效查询的成本通常很高,因而优化过程所花费的时间超过了提高查询执行速度后重新获得的时间。 如果可以反复使用相同的优化访问计划来执行重复查询,那么优化的益处将更为显著。