私は2200万レコードの大きなテーブルを持っています。 私は次のクエリを実行したい:私は、クエリの実行計画を分析するために開始した後日付によるMySQLのクエリは大きな逆数で
CREATE INDEX endDate_index USING BTREE ON alerts_stat(endDate)
::私はENDDATAフィールドのBTREEインデックスを追加パフォーマンスを向上させるために
select auto_alerts from alerts_stat where endDate > "2012-12-01"
を
私がしたいとき今まで15日から7日の間にパラメータを取得する:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 7;
次の実行計画で2,762,088行を処理しました。
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'range', 'endDate_index', 'endDate_index', '4', NULL, '2762088', 'Using where'
私は一日で間隔を長くすると、私が受け取っ:
explain select alerts_sp from alerts_stat
where endDate between CURDATE() - 15 and CURDATE() - 6;
をEXPLAINは、MySQLの計画はすべて22923126行を処理すると述べました。
'1', 'SIMPLE', 'browser_plugin_alerts_stat', 'ALL', 'endDate_index', NULL, NULL, NULL, '22932390', 'Using where'
たとえば、WHEREプロセス22,925,642で条件なしで選択します。
実行計画を改善してもよいですか?多分私はどこかで間違いを抱えているのでしょうか、あるいはMySQLの正常な動作ですか?
ありがとうございました。それは私の場合だと思う。したがって、MySQL固有の動作です。大きな間隔でsum( 'alerts_sp')などを取得するために、何らかの方法でクエリを改善できますか? – Taky