为了效率而使用准备好的语句

要提高执行效率,您可在循环中使用 PREPARE 语句和 EXECUTE 语句,来消除冗余解析和优化所引起的开销。例如,每次循环运行时,都解析位于 WHILE 循环内的 UPDATE 语句。如果您在该循环之外准备 UPDATE 语句,则仅解析该语句一次,消除开销并提高了语句执行的速度。下列示例展示如何准备一 GBase 8s ESQL/C 语句来提高性能:
EXEC SQL BEGIN DECLARE SECTION;
   char disc_up[80];
   int cust_num;
EXEC SQL END DECLARE SECTION;
main()
{
   sprintf(disc_up, "%s %s","update customer ",
      "set discount = 0.1 where customer_num = ?");
   EXEC SQL prepare up1 from :disc_up;
   while (1)
      {
      printf("Enter customer number (or 0 to quit): ");
      scanf("%d", cust_num);
      if (cust_num == 0)
         break;
      EXEC SQL execute up1 using :cust_num;
      }
}

如同 SQL 语句高速缓存一样,准备好的语句可降低重新优化同一查询计划的频度,从而节约在一些上下文中的资源。准备好的语句和语句高速缓存 部分讨论综合地使用准备好的 DML 语句、游标和 SQL 语句高速缓存或提升查询性能的替代技术。