カウチベース5.5N1Ql
サンドボックスcouchbaseデータベースに150kのドキュメントがあり、ドキュメント名は次の形式です。
alpha_model::XXXXXXX::version
このコマンドを実行すると:
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha_model::100004993::%" LIMIT 10;
結果数:5。経過時間は 1.13s
ただし、「_」の前に「\」を追加すると、パフォーマンスが大幅に向上します。
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha\\_model::100004993::%" LIMIT 10;
結果数:5。経過時間は 8.16ms
2番目の方法が100倍以上速いのはなぜですか?アンダースコアは悪いですか?パフォーマンスを向上させるためにエスケープする必要がある他のキャラクターはありますか
_は、その場所の任意の文字に一致するワイルドカードです。正確に検索したい場合は、それをエスケープする必要があります。https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/comparisonops.htmlでLIKEをチェックアウトします。
結果が同じであるため、その場所に他のキャラクターがいない可能性があります。_に他の文字がある場合、結果は異なります。
IndexScanはワイルドカードでは実行できないため、IndexScanは最初のワイルドカードまでプレフィックス文字列で実行されます。これが、エスケープ文字IndexScanがより多くの結果を生成し、時間がかかることのない理由です。_をエスケープすると、ワイルドカード文字は%から始まります。
EXPLAINを実行し、スパンをチェックアウトして、正確性と最適化を確認します。
チェックアウトページ152、述語がIndexScanスパンに変換される方法https://blog.couchbase.com/wp-content/uploads/2017/10/N1QL-A-Practical-Guide-2nd-Edition.pdfチェックアウトページ341を使用してクエリを最適化するプロファイリングを要求します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加