Description
  
   PREPARE creates a prepared query. A prepared
   query is a server-side object that can be used to optimize
   performance. When the PREPARE statement is
   executed, the specified query is parsed, rewritten, and
   planned. When a subsequent EXECUTE statement is
   issued, the prepared query need only be executed. Thus, the
   parsing, rewriting, and planning stages are only performed once,
   instead of every time the query is executed.
  
   Prepared queries can take parameters: values that are
   substituted into the query when it is executed. To specify the
   parameters to a prepared query, include a list of data-types with
   the PREPARE statement. In the query itself, you
   can refer to the parameters by position using
   $1, $2, etc. When executing
   the query, specify the actual values for these parameters in the
   EXECUTE statement -- refer to EXECUTE
   for more information.
  
   Prepared queries are stored locally (in the current backend), and
   only exist for the duration of the current database session. When
   the client exits, the prepared query is forgotten, and so it must be
   re-created before being used again. This also means that a single
   prepared query cannot be used by multiple simultaneous database
   clients; however, each client can create their own prepared query
   to use.
  
   Prepared queries have the largest performance advantage when a
   single backend is being used to execute a large number of similar
   queries. The performance difference will be particularly
   significant if the queries are complex to plan or rewrite. For
   example, if the query involves a join of many tables or requires
   the application of several rules. If the query is relatively simple
   to plan and rewrite but relatively expensive to execute, the
   performance advantage of prepared queries will be less noticeable.
  
    Notes
   
	In some situations, the query plan produced by
	PostgreSQL for a prepared query may be
	inferior to the plan produced if the query were submitted and
	executed normally. This is because when the query is planned (and
	the optimizer attempts to determine the optimal query plan), the
	actual values of any parameters specified in the query are
	unavailable. PostgreSQL collects
	statistics on the distribution of data in the table, and can use
	constant values in a query to make guesses about the likely
	result of executing the query. Since this data is unavailable when
	planning prepared queries with parameters, the chosen plan may be
	sub-optimal.
   
	For more information on query planning and the statistics
	collected by PostgreSQL for query
	optimization purposes, see the ANALYZE documentation.