等価条件は、比較述語を持つ検索条件です。
SQL オプティマイザでは、等価条件に対して以下の制約が課されます。
● 唯一の演算子は関係演算子 = です。
● 等価条件の書式は、以下のいずれかになります。
<column_spec> =<extended_value_spec>
<column_spec> =<subquery>
SQL オプティマイザが等価条件を評価して検索方針を決定するには、等価条件がこれらのいずれかの書式である必要があります。等価条件が別の書式である場合、SQL オプティマイザはこれを変換しようとします。
SQL オプティマイザは、以下の書式の式を、NOT を使用せず、否定された演算子 = を使用する条件に変換します。
...NOT (<column_spec> <><extended_value_spec>)
...NOT (<column_spec> <><subquery>)
これにより、SQL オプティマイザは変換した条件の処理を続行することができます。
例
SQL オプティマイザを説明するために使用する例は、スキーマ HOTEL におけるデモデータベースDEMODB とその完全なデモデータにもとづいています。
データベースシステムのコンセプト、スキーマ HOTEL のオブジェクト
SELECT * FROM hotel.customer
WHERE name = 'Smith'
修飾:
name = 'Smith'
テーブル CUSTOMER
の一次キー:
cno
修飾列の索引:
FULL_NAME_INDEX (name,
firstname)
使用される検索方針: RANGE CONDITION FOR
INDEX
索引 FULL_NAME_INDEX (name, firstname) を使用して、名称Smith を持つすべてのエントリを検索することができます。
EXPLAIN 文の結果
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
CUSTOMER |
FULL_NAME_INDEX |
RANGE CONDITION FOR INDEX |
34 |
|
NAME |
(USED INDEX COLUMN) |
|
|
|
RESULT IS NOT
COPIED、 |
|
その他の SQL 文の簡単な例については、SQL チュートリアルを参照してください。
参照:
SQL 参照マニュアル、比較述語 (comparison_predicate)