索引を使用する問合せの例
単純な問合せを記述して、索引の使用方法を理解できます。
問合せ1:
SELECT fullname, ticketNo,bag.bagInfo[].tagNum,
bag.bagInfo[].routing
FROM BaggageInfo bag WHERE 1762340000000 < ticketNo
AND ticketNo < 1762352000000
前述の例では、問合せに2つの索引条件が含まれています。ここでは、ticketNo
が主キーとして使用されているため、主キー索引を使用します。主キー索引の場合、1762340000000 < ticketNoは開始条件で、ticketNo < 1762352000000は停止条件です。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : { "ticketNo" : { "start value" : 1762340000000,
"start inclusive" : false,
"end value" : 1762352000000,
"end inclusive" : false } }
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ2:
SELECT fullname, ticketNo,bag.bagInfo[].tagNum,
bag.bagInfo[].routing
FROM BaggageInfo bag
WHERE ticketNo > 1762340000000 OR
ticketNo < 1762352000000
前述の例で、問合せには、WHERE式全体である1つの索引条件が含まれています。ここでは、ticketNo
が主キーとして使用されているため、主キー索引を使用します。条件はフィルタリング条件です。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
],
"index filtering predicate" :
{
"iterator kind" : "OR",
"input iterators" :
[
{
"iterator kind" : "GREATER_THAN",
"left operand" :
{
---
},
"right operand" :
{
---
}
},
{
"iterator kind" : "LESS_THAN",
"left operand" :
{
---
},
"right operand" :
{
---
}
}
]
}
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ3:
SELECT fullName,bag.ticketNo, bag.confNo,
bag.bagInfo[].tagNum,bag.bagInfo[].routing
FROM BaggageInfo bag WHERE bag.confNo="FH7G1W"
前述の例で、2つの索引は適用可能なcompindex_tckNoconfNo
およびfixedschema_conf
です。
ticketNo
に対する単一の索引であるため、fixedschema_conf
が使用されます。索引スキャンは等価条件を使用して実行されます。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "fixedschema_conf",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {"confNo":"FH7G1W"},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ4:
SELECT fullname,bag.bagInfo[].routing FROM BaggageInfo bag
WHERE gender!="F"
前述の例では、性別に関する情報を持つ索引がないため、索引条件はありません。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ5:
SELECT bag.contactPhone, bag.fullName FROM BaggageInfo bag
ORDER BY bag.fullName
前述の例では、索引compindex_namephone
のみが適用可能です。ORDER BY式が問合せで使用される索引の最初のフィールドと一致するため、ソート(order by句の場合)は索引ベースとなります。このケースでは、SELECT句に必要な氏名および連絡先の電話番号情報が索引の中にあります。その結果、表にアクセスすることなく、問合せ全体に索引のみから回答できます。そのため、この例では、索引compindex_namephone
がカバー索引になります。問合せプロセッサは、この最適化を適用します。
compindex_namephone
が使用されることと、これがカバー索引であることがわかります。"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "compindex_namephone",
"covering index" : true,
"index row variable" : "$$bag_idx",
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ6:
SELECT fullName, bag.ticketNo, bag.bagInfo[].bagArrivalDate
FROM BaggageInfo bag WHERE EXISTS
bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]
前述の例で、EXISTS条件は、実際にはフィルタリング条件に変換されます。1つのフィルタリング条件(つまりWHERE式全体)が存在します。
simpleindex_arrival
が使用されています。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "simpleindex_arrival",
"covering index" : false,
"index row variable" : "$$bag_idx",
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
],
"index filtering predicate" :
{
"iterator kind" : "GREATER_OR_EQUAL",
"left operand" :
{
---
},
"right operand" :
{
---
}
}
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ7:
SELECT bag.confNo, count(bag.bagInfo) AS TOTAL_BAGS
FROM BaggageInfo bag GROUP BY bag.confNo
前述の例では、2つの索引fixedschema_conf
およびcompindex_tckNoconfNo
を適用できます。
confNo
のみを持つ単一の索引であるため、索引fixedschema_conf
が使用されます。この問合せでは、グループ化は索引ベースです。集計count関数を使用して手荷物数を決定するためにbagInfo全体の詳細が必要であるため、ここでの索引はカバー索引ではありません。"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "fixedschema_conf",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ8:
SELECT bagdet.fullName, bagdet.bagInfo[].tagNum
FROM BaggageInfo bagdet
WHERE bagdet.fullName IN
("Lucinda Beckman", "Adam Phillips",
"Zina Christenson","Fallon Clements")
前述の例では、索引compindex_namephone
のみが適用可能です。
compindex_namephone
が使用されます。compindex_namephone
に対して索引スキャンが実行され、4つの等価述語が評価されます。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bagdet",
"index used" : "compindex_namephone",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {"fullName":"Lucinda Beckman"},
"range conditions" : {}
},
{
"equality conditions" : {"fullName":"Adam Phillips"},
"range conditions" : {}
},
{
"equality conditions" : {"fullName":"Zina Christenson"},
"range conditions" : {}
},
{
"equality conditions" : {"fullName":"Fallon Clements"},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ9:
SELECT fullName,bag.ticketNo, bag.confNo,
bag.bagInfo[].tagNum,bag.bagInfo[].routing
FROM BaggageInfo bag WHERE
bag.ticketNo=1762311547917
AND bag.confNo="FH7G1W"
前述の例では、索引compindex_tckNoconfNo
を使用できますが、主索引(ticketNo
)のみが使用されます。主索引に対して索引スキャンが実行され、WHERE式が評価されます。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {"ticketNo":1762311547917},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。
問合せ10:
SELECT $flt_src as SOURCE, count(*) as COUNT
FROM BaggageInfo $bag,
$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src
GROUP BY $flt_src
前述の例では、fltRouteSrc
フィールドに対する索引はありません。したがって、グループ化は一般的な方法で行われます。SELECT文で生成されたレコードを反復処理する内部変数が作成されます。
"iterator kind" : "TABLE",
"target table" : "BaggageInfo",
"row variable" : "$bag",
"index used" : "primary index",
"covering index" : false,
"index scans" :
[
{
"equality conditions" : {},
"range conditions" : {}
}
]
問合せの実行方法の詳細は、「問合せ実行計画」を参照してください。