問合せ9: 主索引を使用したSINGLE PARTITION問合せ
特定のチケット番号および予約コードを持つ乗客のチケット詳細(チケット番号、予約コード、タグ番号および経路)を選択します。
SELECT fullName,bag.ticketNo, bag.confNo, bag.bagInfo[].tagNum,
bag.bagInfo[].routing FROM BaggageInfo bag WHERE
bag.ticketNo=1762311547917 AND bag.confNo="FH7G1W"
計画:
{
"iterator kind" : "RECEIVE",
"distribution kind" : "SINGLE_PARTITION",
"input iterator" :
{
"iterator kind" : "SELECT",
"FROM" :
{
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" : [
{
"equality conditions" : {"ticketNo":1762311547917},
"range conditions" : {}
}
]
},
"FROM variable" : "$$bag",
"WHERE" :
{
"iterator kind" : "EQUAL",
"left operand" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "confNo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
},
"right operand" :
{
"iterator kind" : "CONST",
"value" : "FH7G1W"
}
},
"SELECT expressions" : [
{
"field name" : "fullName",
"field expression" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "fullName",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
},
{
"field name" : "ticketNo",
"field expression" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "ticketNo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
},
{
"field name" : "confNo",
"field expression" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "confNo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
},
{
"field name" : "tagNum",
"field expression" :
{
"iterator kind" : "ARRAY_CONSTRUCTOR",
"conditional" : true,
"input iterators" : [
{
"iterator kind" : "FIELD_STEP",
"field name" : "tagNum",
"input iterator" :
{
"iterator kind" : "ARRAY_FILTER",
"input iterator" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "bagInfo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
}
}
]
}
},
{
"field name" : "routing",
"field expression" :
{
"iterator kind" : "ARRAY_CONSTRUCTOR",
"conditional" : true,
"input iterators" : [
{
"iterator kind" : "FIELD_STEP",
"field name" : "routing",
"input iterator" :
{
"iterator kind" : "ARRAY_FILTER",
"input iterator" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "bagInfo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
}
}
]
}
}
]
}
}
説明:
- この問合せ計画のルート・イテレータはRECEIVEイテレータで、子が1つ(入力イテレータ)あり、それはSELECTイテレータです。
- この問合せでは、WHERE句に完全シャード・キーを指定します。その結果、結果セット全体が単一のパーティションに含まれ、RECEIVEイテレータはそのパーティションを格納する単一のRNにサブプランを送信します。
FROM
フィールドの値がイテレータです。このケースではTABLEイテレータとなります。- SINGLE_PARTITION問合せでは、主索引または2次索引を参照できます。この例では、主キー索引が使用されています。これはカバー索引ではありません(表をスキャンして索引エントリ以外の列をフェッチする必要があるため)。
- index scansプロパティには、実行する索引スキャンを定義する開始条件と停止条件が含まれます。
- FROM変数は、FROMイテレータによって生成されるレコード全体にわたる変数の名前です。ここではFROMイテレータはTABLEイテレータで、FROM変数(
$$bag
)は、使用する索引がカバー索引ではないため、TABLEイテレータのrow variableと同じになります。 - SELECT式では、5つのフィールド(
fullname, ticketNo,confNo, bag.bagInfo[].tagNum,bag.bagInfo[].routing
)がフェッチされます。これらは、SELECT式句の5つのフィールド名およびフィールド式に対応します。最初の3つのフィールドについては、フィールド式がFIELD_STEP
イテレータを使用して計算されます。最後の2つのフィールドについては、対応する配列を反復処理するARRAY_CONSTRUCTOR
イテレータを使用してフィールド値がフェッチされます。