# Queries with an unknown search condition

Queries sometimes have an unknown search condition, such as in the case when the statement's WHERE clause involves dynamic parameters that are known only at execution time and not at compilation time, or when the statement involves a join. For example:

    -- dynamic parameters
    SELECT *
    FROM Flights
    WHERE orig_airport = ?

    rollback
    -- joins
    SELECT * FROM Countries, Cities
    WHERE Countries.country_ISO_code = Cities.country_ISO_code

    -- complex search conditions
    SELECT * FROM Countries
    WHERE region = (select region from Countries where country = 'Spain')

In the above SELECT statements, the optimizer cannot get enough useful information from the index about how many rows will be returned by a particular access path. However, it can often make a good guess by looking at a table's selectivity for a particular WHERE clause.

Selectivity refers to the fraction of rows that will be returned from the table for the particular WHERE clause. The optimizer multiplies the number of rows in the table by the selectivity for a particular operation. For example, if the selectivity for a particular search operation is .10, and the table contains 100 rows, the optimizer estimates that the operation will return 10 rows. (This is not exact; it is just a good guess.)

Parent topic: Estimations of rows scanned from disk for an index scan
Related concepts
Queries with a known search condition