处理 SQL 语句
在讨论以编程方式使用 SQL 的技术之前,有必要讨论如何处理 SQL 语句。 所涉及的步骤适用于所有三种技术,尽管每种技术在不同时间执行。 下图显示了处理 SQL 语句所涉及的步骤,本部分的其余部分将讨论这些步骤。
的步骤
若要处理 SQL 语句,DBMS 执行以下五个步骤:
DBMS 首先分析 SQL 语句。 它将语句分解为单独的单词(称为标记),确保语句具有有效的谓词和有效子句,等等。 在此步骤中可以检测到语法错误和拼写错误。
DBMS 验证 语句。 它针对系统目录检查 语句。 数据库中是否存在 语句中名为 的所有表? 是否所有列都存在,列名是否明确? 用户是否具有执行 语句所需的权限? 在此步骤中可以检测到某些语义错误。
DBMS 为 语句生成访问计划。 访问计划是执行 语句所需的步骤的二进制表示形式;它是可执行代码的 DBMS 等效项。
DBMS 优化访问计划。 它探索了执行访问计划的各种方法。 索引能否用于加速搜索? DBMS 应该先将搜索条件应用于表 A,然后将其联接到表 B,还是应该从联接开始,然后再使用搜索条件? 是否可以避免对表进行顺序搜索,或者将其缩减为表的子集? 浏览这些替代项后,DBMS 会选择其中一个。
DBMS 通过运行访问计划来执行 语句。
用于处理 SQL 语句的步骤因所需的数据库访问量和花费的时间而异。 分析 SQL 语句不需要访问数据库,并且可以非常快速地完成。 另一方面,优化是一个 CPU 密集型过程,需要访问系统目录。 对于复杂的多表查询,优化器可能会探索数千种执行同一查询的不同方式。 但是,低效地执行查询的成本通常很高,以至于在提高查询执行速度时,优化所花费的时间比重新获得的时间还要多。 如果可以反复使用相同的优化访问计划来执行重复查询,则这一点就更加重要。