每次向数据库发送语句时,数据库服务器必须执行以下步骤:
服务器必须分析语句并将其转换为内部形式。这有时称为准备语句。
服务器必须验证对数据库对象的所有引用的正确性,例如通过检查查询中提到的列是否确实存在。
如果语句涉及连接或子查询,则查询优化程序会生成访问计划。
在所有的这些步骤都已经执行之后,它会执行该语句。
如果要反复使用同一语句,例如,在表中插入多行,那么重复准备语句会产生很大不必要的开销。为消除这种开销,一些数据库编程接口提供了使用预准备语句的方法。预准备语句是包含一系列占位符的语句。当要执行语句时,您所要做的只是给占位符赋值,而不是再次重新准备整个语句。
使用预准备语句在执行多个类似的操作(如插入多行)时特别有用。
一般来讲,使用预准备语句需要执行下面的步骤:
准备语句
在这一步,一般都要为语句提供一些占位符而非实际的值。
反复执行预准备语句
在此步骤中,提供每次执行语句时要使用的值。不必每次都准备语句。
删除语句
在此步骤中,释放与预准备语句关联的资源。一些编程接口会自动处理此步骤。
通常,不应该准备那些将只执行一次的语句。单独的准备和执行会产生轻微的性能损失,并且它会给应用程序带来不必要的复杂性。
然而,在一些接口中,确实需要准备一个语句以将它与游标关联。
有关游标的信息,请参见游标简介。
用来准备和执行语句的调用并不是 SQL 的组成部分,并且它们也因接口而异。SQL Anywhere 中的每一个编程接口都提供了使用预准备语句的方法。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |