コンテンツエリア開始

Background documentation 索引列の検索条件 Locate the document in its SAP Library structure

SQL 文に索引列検索条件が含まれる場合、SQL オプティマイザは、以下の検索方針を使用することができます。

検索条件

SQL オプティマイザの検索方針

索引列の等価条件

関連する倒置一覧にキーが含まれる行にアクセスします。

索引列の IN 条件

倒置一覧にキーが含まれる行にアクセスします。

2 つの範囲制限 (上限または下限) のどちらかについて 1 つの条件のみ (<<=>>=) を持つ範囲条件

範囲によって決められた倒置一覧にキーが含まれる行にアクセスします。

両範囲制限が指定されている範囲条件。AND によってリンクされた同じ列に対して BETWEEN 演算子と 2 つの条件 (<= または >=) のどちらを使用してこの指定が行われているかは、検索方針の選択とは関係ありません。

範囲によって決められた倒置一覧にキーが含まれる行にアクセスします。

等価/IN 条件と範囲条件の場合、必要なすべての値がすでに倒置一覧に含まれているため、行にアクセスする必要がないクエリも存在します。

SQL オプティマイザを説明するために使用する例は、スキーマ HOTEL におけるデモデータベースDEMODB とそのデモデータにもとづいています。

データベースシステムのコンセプトスキーマ HOTEL のオブジェクト

等価条件

Example

SELECT * FROM hotel.customer
  WHERE name = 'Wagner'

修飾: name = 'Wagner'
テーブル CUSTOMER の一次キー: cno
修飾列の索引: FULL_NAME_INDEX (name, firstname)
使用される検索方針: RANGE CONDITION FOR INDEX

等価条件は最初の索引列にのみ入力されるため、この SQL 文は RANGE CONDITION を使用して処理する必要があります。索引には値 Wagner を持つエントリが複数存在する場合があります。

開始キーは、最初の索引列の等価条件を満たす最初のレコード (Wagner) に設定されます。終了キーは、条件を満たさない最初のレコード (Walker) にあります。

EXPLAIN 文の結果

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

FULL_NAME_INDEX

RANGE CONDITION FOR INDEX

34

 

NAME

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED
COSTVALUE IS


2

IN 条件

Example

SELECT * FROM hotel.customer
  WHERE name IN ('Smith', 'Miller')

修飾: name = IN ('Smith', 'Miller')
テーブル CUSTOMER の一次キー: cno
修飾列の索引: FULL_NAME_INDEX (name, firstname)
使用される検索方針: IN CONDITION FOR INDEX

SQL 文は IN 条件を使用して処理されます。SQL オプティマイザは、対応する RANGE 条件も評価しますが、この条件は指定した値に対して最もコストが大きくなります。

EXPLAIN 文の結果

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

CUSTOMER

FULL_NAME_INDEX

IN CONDITION FOR INDEX

34

 

NAME

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED
COSTVALUE IS


21

範囲条件

ENO 列を使用して 1 列の索引EMPLOYEE_ENO を登録します。

参照:

SQL 参照マニュアルCREATE INDEX (create_index_statement)

Example

SELECT eno, hno FROM hotel.employee
  WHERE eno >= 8

修飾: eno = 8
テーブル EMPLOYEE の一次キー: hnoeno
修飾列の索引: EMPLOYEE_ENO (eno)
使用される検索方針: RANGE CONDITION FOR INDEX

SELECT 一覧に入力できるのは索引と一次キーの列のみであり、一次キー列は索引ツリーにも保存されるため、この SQL 文は INDEX ONLY 方針を使用して処理することができます。

アクセスは索引EMPLOYEE_ENO を使用して行われます。開始キーは、以上条件を満たす最初のレコード ( 8) に設定されます。停止キーは、索引の最後のレコードに設定されます。

EXPLAIN 文の結果

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

EMPLOYEE

EMPLOYEE_ENO

RANGE CONDITION FOR INDEX

45

 

 

ONLY INDEX ACCESSED

 

 

ENO

(USED INDEX COLUMN)

 

 

 

RESULT IS NOT COPIED
COSTVALUE IS


45

BETWEEN 条件の場合、停止キーは、索引の最後ではなく、RANGE 条件を満たす最後のエントリに設定されます。

その他の SQL 文の簡単な例については、Structure linkSQL チュートリアルを参照してください。

参照:

EXPLAIN

キー列の検索条件

すべての検索方針の一覧

 

 

コンテンツエリア終了