、GROUP BYとSUMにインデックスを使用していない:私はクエリを実行しようとすると、その後MySQLは、私はちょうどでテーブルを作成したクエリ
CREATE TABLE `table_test` (
`time` date NOT NULL,
`line_id` char(36) NOT NULL,
`location_id` char(36) NOT NULL,
`placement_id` char(36) NOT NULL,
`flight_id` char(36) NOT NULL,
`impressions` int(11) DEFAULT `0`,
PRIMARY KEY (`time`,`line_id`,`location_id`,`placement_id`,`flight_id`),
KEY `table_test_IDX` (`time`,`placement_id`,`line_id`,`impressions`) USING
BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
:
SELECT
time,
placement_id,
line_id,
SUM(impressions) AS totalImpress
FROM
table_test
WHERE
time BETWEEN '2017-11-01' AND '2017-11-30'
GROUP BY time , placement_id , line_id;
それは常にUsing where; Using temporary; Using filesort
を使用し、中この場合、クエリにはtable_test_IDX
を使用します。
私はここで何が間違っていましたか?
多くの方に感謝します。
あなたの答えに感謝します。しかし、私はこのオプションを使ってクエリを実行しようとすると思います: 'USE INDEX(table_test_IDX)'。クエリの時間は通常より2倍速くなります。 –
はい、クエリのどの時点でインデックスが使用されていますか?オプティマイザは必ずしも正しいことを取得するとは限りません。妥当な実行時間で、かなり小さなデータセットを持っているなら、私は物事を分析しすぎることはありません。ほとんどの場合、オプティマイザはあなたよりスマートです。 –