如果 SPL 例程包含 SQL 语句,那么在某一点上,查询优化器将对 SPL 例程中的 SQL 的可能的查询计划进行评估并选择成本最低的查询计划。数据库服务器将为每个 SQL 语句选择的查询计划放置于 SPL 例程的执行计划中。
当您用 CREATE PROCEDURE 语句创建一个 SPL 例程时,数据库服务器会在此时试图优化 SPL 例程中的 SQL 语句。如果在编译时间表无法检查(因为它们不存在或不可用),创建将不会失败。在这种情况下,数据库服务器将在 SPL 例程第一次执行时对 SQL 语句进行优化。
数据库服务器将优化的执行计划存储在 sysprocplan 系统目录表中,以供其他进程使用。另外,数据库服务器还将有关 SPL 例程的信息(如过程名称和所有者)存储在 sysprocedures 系统目录表中,并将 SPL 例程的 ASCII 版本存储在 sysprocbody 系统目录表中。
图: 系统目录表中存储的 SPL 信息