SQL ソリューションを使用してこれらのクエリを高速に実行するには、次の経験則を使用します。ただし、これには多くの注意点があり、使用している実際の SQL エンジンはソリューションに非常に関連しています。
あなたのデータは整数、日付、または短いスケーラーであると想定しています。長い弦などでゲームが変わります。また、固定比較 (=、<、>、<> など) のみを使用していると仮定しています。
a) 時間間隔 Y がすべてのクエリに存在する場合は、Y 述語が大量の行を選択していない限り、インデックスが作成されていることを確認してください。行がディスク上で隣り合ってパックされるように、行が「Y」の順序で格納されていることを確認してください。いずれにせよ、これは新しいデータに対して時間の経過とともに自然に発生します。Y 述語が非常に狭い場合 (つまり、数百行) は、これだけで十分です。
b) 「select 」または「select count( )」を実行していますか? 「select *」でない場合、存在するエンジンやその他のインデックスによっては、垂直パーティショニングが役立つ場合があります。
c) 値が広く分散し、重複が多すぎない列ごとに単一列インデックスを作成します。インデックス YEAR_OF_BIRTH は通常問題ありませんが、FEMALE_OR_MALE のインデックス作成は多くの場合適切ではありません - これはデータベース エンジンに大きく依存しますが。
d) FEMALE_OR_MALE のような列があり、「Y 述語」が広い場合、別の問題があります。ほとんどの行から女性の数を選択するのは困難です。インデックス作成を試すことができますが、エンジンによって異なります。
e) 可能であれば、列を「NOT NULL」にしてみてください。通常、行ごとに 1 ビットを節約し、内部オプティマイザ操作を簡素化できます。
f) 更新/挿入。インデックスを作成すると挿入のパフォーマンスが低下することがよくありますが、レートが十分に低い場合は問題にならない可能性があります。1 億行しかないので、挿入率はかなり低いと思います。
g) マルチセグメント キーは役に立ちますが、あなたはすでにそれはダメだと言っています。
h) 高速ディスク (RPM) を取得します。通常、これらのタイプのクエリの問題は IO です (TPC-H ベンチマークは IO に関するものであり、「H」の問題のように聞こえます)。
他にも多くのオプションがありますが、「クエリをできるだけ高速にする」ためにどれだけの労力を費やしたいかによって異なります。これを解決するためのNo-SQLやその他のオプションはたくさんありますが、質問のその部分は他の人に任せます.