結合は、複数のテーブルを互いにリンクし、その結果として結合テーブルを返す SQL 文です。
参照:
SQL チュートリアル、結合: 複数のテーブルからの情報
SQL 参照マニュアル、JOIN 述語 (join_predicate)
機能
SQL オプティマイザのタスクは、テーブルを処理するために最適な順序を見つけることです。SQL オプティマイザは、リンク対象の新しいテーブルの行にできるだけ直接アクセスし、中間の結果テーブルのサイズを最小限に抑えようとします。このため、SQL オプティマイザは、最も制限された検索方針を使用する最小テーブルの結合から処理を開始します。これにより、最初は一時的な結果テーブルが小さく保たれます。
SELECT 文の FROM 句に指定されているテーブルの順序は、これらの処理の順序には影響しません。
SQL オプティマイザは、以下の検索方針の 1 つを選択し、古い一時結果テーブルの結合列値から開始して、新しいテーブルの行にアクセスすることができます。
JOIN VIA MULTIPLE INDEXED COLUMNS
JOIN VIA RANGE OF MULTIPLE INDEXED COL.
JOIN VIA RANGE OF MULTIPLE KEY COLUMNS
結合ステップで比較する2 つの列の長さが同じでない場合、SQL オプティマイザは、上記の検索方針をすべて使用することはできません。このような制限を回避するには、結合するすべての列の値範囲 (ドメイン) を同じように定義します。
例
SQL オプティマイザを説明するために使用する例は、スキーマ HOTEL におけるデモデータベースDEMODB とその完全なデモデータにもとづいています。
データベースシステムのコンセプト、スキーマ HOTEL のオブジェクト
SELECT customer.cno,
customer.title, customer.name,
customer.zip, city.name, city.state,
customer.address
FROM hotel.customer, hotel.city
WHERE customer.zip = city.zip
結合テーブル:
CUSTOMER と CITY
修飾:
customer.zip
= city.zip
CITY
に使用される検索方針: TABLE SCAN
CUSTOMER
に使用される検索方針: JOIN VIA KEY RANGE
EXPLAIN 文の結果
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
CITY |
|
TABLE SCAN |
1 |
CUSTOMER |
|
JOIN VIA KEY RANGE |
1 |
|
|
TABLE TEMPORARY SORTED |
|
|
ZIP |
(USED SORT COLUMN) |
|
|
|
RESULT IS
COPIED |
|
結合処理は、テーブル CITY へのアクセスから開始されます。これは、検索方針 TABLE SCAN を使用して実行されます。
JOIN VIA KEY RANGE を使用したテーブルCUSTOMER への結合移送の場合、列ZIP が使用されます。
結合の場合、結果セットは常に生成されます (RESULT IS COPIED)。
参照:
データベースパラメータ JOIN_SEARCH_LEVEL
SQL 参照マニュアル、ドメイン名 (domain_name)