SQL语句准备

ODBC 接口中定义了已准备好的执行方法,以减少与重复SQL的分析和编译开销。应用程序生成一个包含 SQL 语句的字符串,然后分两个阶段执行该语句。 它将调用SQLPrepare 函数一次,以使该语句通过数据库引擎分析并编译为执行计划。 然后,它会在每次执行准备好的执行计划时调用 SQLExecute 。 这节省了每次执行的分析和编译开销。 应用程序通常使用准备好的执行来重复执行相同的参数化 SQL 语句。

对于多数数据库中的需要执行三次或四次以上的语句,准备好的执行要比直接执行更快速。这主要是因为准备好的执行仅需编译一次语句,而直接执行的语句在每次执行时都需要编译。 准备好的执行还可以减少网络流量,因为驱动程序在每次执行语句时都可以向数据源发送执行计划标识符及参数值,而不是整个 SQL 语句。

神通数据库后端内置了执行计划缓存功能,会缓存SQLExecDirect执行SQL语句的执行计划,从而减少了直接执行和准备好的执行之间的性能差异。 这使直接执行的语句也具备了准备好的执行的某些性能优势。但依然推荐用SQLPrepare准备语句后多次执行方式。

不应对执行一次的语句使用准备好的执行。 对于执行一次的语句,准备好的执行要比直接执行慢,因为它需要多进行一次从客户端到服务器的网络往返。

使用SQLBindParameter需要与SQLPrepare配套使用,如果准备的SQL语句中有参数的情况下,且有参数的SQL语句必须进行语句准备。

准备SQL使用样例如下:

SQLPrepare(stmt, (SQLCHAR*)"insert into test values(?,?,?)", SQL_NTS );