問題タブ [secondary-indexes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 複合インデックスを使用した「インデックスの使用」: A=、B=、C<=
クエリは簡単ですが、以下の実行計画は期待外れで最適とは言えません。
MySQL 5.7 を使用しています。これがフィドルです(5.6しか提供していませんが)。
Name-IsSequenced
セカンダリ インデックスを使用します。次のことを試してみましょうEXPLAIN
。(クエリは Fiddle にあります。[実行計画の表示] を開いてEXPLAIN
結果を確認してください。)
ここまでは順調ですね。Using index condition
理にかなっています: 条件全体は予想される indexName-IsSequenced
で解決でき、PK は の残りのデータを取得するために必要ですSELECT *
。
Using index
セカンダリ インデックスの一部のみを選択すれば、これを改善できるはずですよね? (PK は常にセカンダリ インデックスの一部であることに注意してください。ただし、セカンダリ インデックスの最後に含めることid
でこれを保証することもできます。結果は、本来あるべきものと同じです。)
さて、結果はUsing where; Using index
です。待って、それは…もっと悪い?! 私たちはそれをより少ない仕事にしました、そして計画はそれがより一生懸命働いていることを示しています.
Using index
達成可能であるべきです。範囲 whereを見つけ、その中name=OrderCreated
にサブ範囲 whereis_sequenced=0
を見つけ、その中にサブ範囲 where を見つけますid<=3
。
不思議なことに、私は ( PK を優先するのを防ぐために と組み合わせて) にUsing index
変更id<=3
することで取得できる他の実験 (いくつかのデータを使用) を持っています。違いの理由はわかりません。(これを Fiddle で試しても、おそらくデータ セットが小さいため、同じままです。)id=3
FORCE INDEX
実行計画が二次索引の予想される効率的な使用を示さない理由を誰か説明できますか? まっすぐにする方法はありますか?
python - Python でのセカンダリ インメモリ インデックス表現
numpy や arrow などの高度に最適化された数学パッケージを使用して、Python でセカンダリ インメモリ インデックスを構築するための効率的なソリューションを探しています。パフォーマンス上の理由から、パンダを除外しています。
意味
「セカンダリ インデックスには、インデックスを作成する属性の既存の各値のエントリが含まれています。このエントリは、属性値をキーとして、値として、ベース テーブル内のすべてのレコードへのポインタのリストを持つキー/値のペアとして見ることができます。この価値があります。」- JV。D'Silva等。(2017)
簡単な例を見てみましょう。後でこれをスケーリングして、いくつかのベンチマークを生成できます。
興味深いことに、 pyarrow.Array.dictionary_encodeメソッドは、値の配列を、セカンダリ インデックスに近い辞書エンコード表現に変換できます。
ここで問題を開きました
したがって、問題は、値とインデックスを効率的に保持するために、Python データ構造を使用してメモリ内にセカンダリ インデックスをどれだけ速く構築できるかということです。しかし、クエリのフィルタリング (ポイント、範囲) と変換 ( TRIADBのハイパーエッジとも呼ばれる行、列、および関連付けの再構築) の両方に役立つ場合、インデックスが役立つため、これは話の半分です。また、この簡単な説明でも、この種のインデックスの更新がいかに簡単かについては触れていません。
多くの理由から、私は PyArrow オープンソース ソリューションの可能性を調査し始めました。並べ替えられた辞書エンコード表現は、通常、メモリ フットプリントの縮小と高速で柔軟なゼロ コピー I/O 処理の優れた組み合わせにより、問題の要件を満たす必要があります。