Ich habe gerade eine Tabelle mit:MySQL hat verwenden Index in SUM nicht mit GROUP BY-Abfrage
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
Dann, wenn ich versuche, eine Abfrage auszuführen:
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;
Es ist immer Using where; Using temporary; Using filesort
verwendet, in In diesem Fall möchte ich, dass die Abfrage table_test_IDX
verwendet.
Was habe ich hier falsch gemacht?
Vielen Dank.
Danke Tim für Ihre Antwort. Aber ich frage mich, wenn ich versuche, die Abfrage mit dieser Option auszuführen: 'USE INDEX (table_test_IDX)'. Die Abfragezeit ist 2x schneller als normal. –
Ja, aber an welcher Stelle in der Abfrage wird der Index verwendet? Der Optimierer bringt die Dinge nicht immer in Ordnung. Wenn Sie einen relativ kleinen Datensatz mit vernünftigen Laufzeiten haben, würde ich nicht über Dinge analysieren; die meiste Zeit ist der Optimierer schlauer als Sie. –