コンテンツエリア開始

Background documentation サブクエリがある SELECT 文の EXPLAIN  Locate the document in its SAP Library structure

列の値がサブクエリの該当対象行と比較される検索方針のコストを決定するには、SQL オプティマイザが該当対象の行数を把握している必要があります。ただし、該当対象の行数はサブクエリが処理されるまでは判明しません。

サブクエリがあるSELECT 文の場合、EXPLAIN により、使用可能検索方針が決定されますが、これらのサブクエリは実行されません。したがって、通常、検索方針 NO STRATEGY NOW (ONLY AT EXECUTION TIME) は外部 SQL 文に対して表示されます。

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

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

Example

EXPLAIN
SELECT name FROM hotel.city
  WHERE name IN (SELECT name FROM hotel.hotel)

修飾: name IN (SELECT name FROM hotel.hotel)
テーブル CITY の一次キー: zip
テーブル HOTEL の一次キー: cno
修飾列の索引: なし
使用される検索方針、外部 SELECT: TABLE SCAN
使用される検索方針、サブクエリ: TABLE SCAN

EXPLAIN 文の結果

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

HOTEL

 

TABLE SCAN

8

CITY

 

TABLE SCAN

11

 

 

RESULT IS COPIED
COSTVALUE IS


101

ホテルの名称がその名をとって命名されたすべての都市名が選択されます。2 つのテーブルに適した索引が存在せず、一次キー列に対する制限がないため、これらの SELECT 文は両方とも TABLE SCAN を使用して処理されます。

Example

EXPLAIN
SELECT cno, name FROM hotel.customer
  WHERE cno = ANY(SELECT cno FROM hotel.reservation WHERE arrival > '2005-01-01')

修飾: cno = ANY(SELECT cno FROM hotel.reservation WHERE arrival > '2005-01-01')
テーブル CUSTOMER の一次キー: cno
テーブル RESERVATION の一次キー: rno
修飾列の索引: なし
使用される検索方針、外部 SELECT: NO STRATEGY NOW (ONLY AT EXECUTION TIME)
使用される検索方針、サブクエリ: TABLE SCAN

EXPLAIN 文の結果

TABLENAME

COLUMN_OR_INDEX

STRATEGY

PAGECOUNT

RESERVATION

 

TABLE SCAN

24

CUSTOMER

 

NO STRATEGY NOW (ONLY AT EXECUTION TIME)

 

 

 

RESULT IS COPIED
COSTVALUE IS

 

指定した日付以降に予約したすべての宿泊客が表示されます。テーブル RESERVATION に対して TABLE SCAN が実行されます。外部 SELECT 文については、検索方針 NO STRATEGY NOW (ONLY AT EXECUTION TIME) が表示されます。

その他の SQL 文の簡単な例については、SQL チュートリアルStructure linkサブクエリ: 内部クエリを参照してください。

参照:

SUBQ CONDITION FOR KEY

SUBQ CONDITION FOR INDEX

すべての検索方針の一覧

参照マニュアル、サブクエリ (subquery)

 

 

コンテンツエリア終了