Home | Previous Page | Next Page   Purpose-Function Reference > Purpose-Function Syntax >

am_scancost

The query optimizer calls am_scancost during a SELECT statement, before it calls am_open.

Syntax

mi_real * am_scancost(MI_AM_TABLE_DESC *tableDesc,
   MI_AM_QUAL_DESC *qualDesc)
tableDesc
points to the table descriptor.
qualDesc
points to the qualification descriptor, which specifies the criteria that a table row must satisfy to qualify for retrieval.

Usage

The am_scancost purpose function estimates the cost to fetch and qualify data for the current query. The optimizer relies on the am_scancost return value to evaluate a query path for a scan that involves the access method. This function is not called for indexes on remote tables.

Warning:
If the access method does not have an am_scancost purpose function, the database server estimates the cost of a scan, which can diminish the optimal nature of the query plan.

Calculating Cost

The following types of information influence cost:

To calculate a cost, am_scancost considers the following factors:

Compute the cost of retrieving only those table entries that qualify.

Important:
Because a function cannot return an mi_real data type by value, you must allocate memory to store the scan cost value and return a pointer to that memory from the am_scancost purpose function.

Factoring Cost

To adjust the result of am_scancost, set the am_costfactor purpose value. The database server multiplies the cost that am_scancost returns by the value of am_costfactor, which defaults to 1 if you do not set it. To find out how to set purpose values, refer to SQL Statements for Access Methods.

Forcing Reoptimization

The optimizer might need a new scan cost for subsequent scans of the same table, for example, because of a join. To execute am_scancost before each rescan, call the mi_qual_setreopt() function. For a list of VTI accessor functions that am_scancost can call to help evaluate cost and the need to reoptimize, refer to Related Topics.

Return Values

The return value is a pointer to an mi_real data type that contains the cost value.

Related Topics

See the descriptions of:

Home | [ Top of Page | Previous Page | Next Page | Contents | Index ]