HPlogo ALLBASE/SQL Advanced Application Programming Guide: HP 3000 MPE/iX Computer Systems

Chapter 10 Analyzing Queries with GENPLAN

» 

Technical documentation

Complete book in PDF
» Feedback

 » Table of Contents

 » Index

The GENPLAN statement can be useful in determining the way to write a SELECT, UPDATE, or DELETE statement for maximum performance. By issuing the GENPLAN statement in ISQL, you can see the optimizer's access plan for a given statement.

Suppose you have written an application containing a query, as in the following example:

   SELECT PartName, VendorNumber, UnitPrice

     INTO :PartName, :VendorNumber, :UnitPrice

     FROM PurchDB.Parts p, PurchDB.SupplyPrice sp

    WHERE p.PartNumber = sp.PartNumber

      AND p.PartNumber = :PartNumber

You run the application and want to improve its performance. One approach would be to issue the ISQL GENPLAN statement with parameters for the embedded query. This provides any scan types and join types for a given statement by query block. You can change the statement in your application, run the application to check any change in performance, and, if necessary, again use GENPLAN to determine the specific access path.

To convert a statement to GENPLAN format:

  • Remove the SELECT statement INTO clause.

  • Remove any null indicator variables from the select statement.

  • In the GENPLAN statement WITH clause, define any input host variables found in the SELECT statement WHERE clause. You must ensure that the SQL data type specified for each variable in the WITH clause is compatible with the data type declared in the application for the host variable. Refer to ALLBASE/SQL Reference Manual, SQL Commands chapter, for data type compatibility charts for each supported language.

Your GENPLAN statement for the above query would be as follows (The input host variable is shaded.):

   GENPLAN WITH (PartNumber char(16)) FOR

         SELECT PartName, VendorNumber, UnitPrice

           FROM PurchDB.Parts p, PurchDB.SupplyPrice sp

          WHERE p.PartNumber = sp.PartNumber

            AND p.PartNumber = :PartNumber

To display the access plan generated by GENPLAN, issue the following statement within the same transaction as the GENPLAN statement:

   SELECT * FROM System.Plan
  • The GENPLAN statement can only be used in ISQL. It cannot be used in an application in a static SQL statement nor in dynamic preprocessing.

Refer to the ALLBASE/SQL Reference Manual for detailed syntax and information regarding scans and indexes.

Feedback to webmaster