問合せ8: 複数の索引スキャンでの2次索引の使用
指定された名前リストにある乗客のフルネームとタグ番号をフェッチします。
SELECT bagdet.fullName, bagdet.bagInfo[].tagNum
FROM BaggageInfo bagdet WHERE bagdet.fullName IN
("Lucinda Beckman", "Adam Phillips",
"Zina Christenson","Fallon Clements");
計画:
{
"iterator kind" : "SELECT",
"FROM" :
{
"iterator kind" : "RECEIVE",
"distribution kind" : "ALL_SHARDS",
"order by fields at positions" : [ 0 ],
"input iterator" :
{
"iterator kind" : "SELECT",
"FROM" :
{
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "fixedschema_conf",
"covering index" : false,
"index scans" : [
{
"equality conditions" : {},
"range conditions" : {}
}
]
},
"FROM variable" : "$$bag",
"GROUP BY" : "Grouping by the first expression in the SELECT list",
"SELECT expressions" : [
{
"field name" : "confNo",
"field expression" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "confNo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
},
{
"field name" : "TOTAL_BAGS",
"field expression" :
{
"iterator kind" : "FN_COUNT",
"input iterator" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "bagInfo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$$bag"
}
}
}
}
]
}
},
"FROM variable" : "$from-1",
"GROUP BY" : "Grouping by the first expression in the SELECT list",
"SELECT expressions" : [
{
"field name" : "confNo",
"field expression" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "confNo",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$from-1"
}
}
},
{
"field name" : "TOTAL_BAGS",
"field expression" :
{
"iterator kind" : "FUNC_SUM",
"input iterator" :
{
"iterator kind" : "FIELD_STEP",
"field name" : "TOTAL_BAGS",
"input iterator" :
{
"iterator kind" : "VAR_REF",
"variable" : "$from-1"
}
}
}
}
]
}
説明:
- この問合せ計画のルート・イテレータはRECEIVEイテレータで、子が1つ(入力イテレータ)あり、それはSELECTイテレータです。
FROM
フィールドの値がイテレータです。このケースではTABLEイテレータとなります。- 索引
compindex_namephone
が使用され、これはカバー索引ではありません(表をスキャンして索引エントリ以外の列をフェッチする必要があるため)。 - IN句のすべての値が、等価条件を持つ索引スキャンを使用して評価されます。実行される索引スキャンは4つあり、それぞれが1つの等価条件を評価します。
- FROM変数は、FROMイテレータによって生成されるレコード全体にわたる変数の名前です。ここではFROMイテレータはTABLEイテレータで、FROM変数(
$$bagdet
)は、使用する索引がカバー索引ではないため、TABLEイテレータのrow variableと同じになります。 - SELECT式では、2つのフィールド(
fullname, bag.bagInfo[].tagNum
)がフェッチされます。これらは、SELECT式句の2つのフィールド名およびフィールド式に対応します。最初のフィールドについては、フィールド式がFIELD_STEP
イテレータを使用して計算されます。2つ目のフィールドについては、対応する配列を反復処理するARRAY_CONSTRUCTOR
イテレータを使用してフィールド値がフェッチされます。