〜400KレコードのinnoDBテーブルを取得します。まれに(決して決して)更新されない場合。mysql - 多くの<テストでwhere節を最適化する
A =値(4から14の範囲の整数、インデックス付け、値) B =値:
最も頻繁な要求は、COUNT(*)句は論理的に、以下のようにいくつかの条件で構成される場合と、選択され
可変数のCx <値条件(0〜26条件) 各Cxはint型の列と一致し、0〜7の値をとります
Cx列は最初に索引付けされません。パフォーマンスに大きな影響を与えずにインデックスを作成しようとしました。
このクエリの最適化の考え方は歓迎します。
このクエリ自体を最適化しようとすること以外に、約25件の連続したリクエストが得られる状況では、2番目の最適化レベルにもあります。それぞれにはCx条件のセットが同じですが、Aそして
Cx条件のセットだけで一時テーブルを作成し、AとBの条件でその一時テーブルから選択することは有望だろうと思いますか?クエリをreforging、テーブルにフィールドを追加考える
------------------
UPDATE 1 ...私が持っていましたベンド、ボブ、リックのおかげで、私を基礎にしてくれたので、何らかの基礎を忘れてしまった。
A /このテーブルが更新されることはめったにありませんが、私はMyISAMのエンジンを変更しました。 オリジナルのinnoDBsizeの2/3までサイズを絞っただけでなく、これによりクエリのパフォーマンスが25%向上しました。
B/Iは、AインデックスとBインデックスのカーディナリティが低いと考えました。私の設定とBobの設定との間のかなりの違いを説明する事実に加えられました。 : A列とB列の値の分布はランダムではありません。それらは完全平均ガウス分布に近く、例えば平均-A = 10および標準-A = 1であり、人口の大多数がA = {9,10,11}を得て、関連付けられたインデックスを決定的に選択的にレンダリングしないことを示している。 Bについての観測はBと似ています。
Bは実際には単一の列ではなく、列B1、B2、B3、B4であると言われているため、4つの複合インデックス(A、Bi) 4.
だから、すべての5
を乗じた全ての公演で私は幸せに近いです! お寄せいただきありがとうございます。
有用な(コンポジット)インデックスを作成し、クエリを最適化しますが、私はそれらを参照してください –
26のコンポジットインデックス(A、B、c1)、(A、B、c2)または1つの複合インデックス(c1、c2、...、C26)? – aCOSwt
1つの合成インデックスのみ。フィールドの秩序はインポテンツです。結果を減らすフィールドが最も最初でなければなりません –