這是我的表:優化MySQL查詢日期組
CREATE TABLE IF NOT EXISTS `test_dates` (
`date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `test_log` (
`id` int(10) unsigned NOT NULL,
`timest` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `test_dates`
ADD PRIMARY KEY (`date`);
ALTER TABLE `test_log`
ADD PRIMARY KEY (`id`),
ADD KEY `emissione` (`timest`);
我有這樣的查詢計算每個日期的日誌:
SELECT d.date, COUNT(l.id)
FROM test_dates d
LEFT JOIN test_log l ON l.timest>=d.date AND l.timest<d.date + INTERVAL 1 DAY
GROUP BY d.date
表test_dates日期科拉姆和test_log被索引表在索引時間列索引。
但解釋這個查詢我得到了查詢類型「ALL」和NULL鍵。
+-----+--------------+--------+-------------+--------+----------------+----------+----------+------+--------+-----------+------------------------------------------------+--+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | |
+-----+--------------+--------+-------------+--------+----------------+----------+----------+------+--------+-----------+------------------------------------------------+--+
| 1 | SIMPLE | d | NULL | index | PRIMARY | PRIMARY | 3 | NULL | 705 | 100.00 | Using index | |
| 1 | SIMPLE | l | NULL | ALL | emissione | NULL | NULL | NULL | 98256 | 100.00 | Range checked for each record (index map: 0x2) | |
+-----+--------------+--------+-------------+--------+----------------+----------+----------+------+--------+-----------+------------------------------------------------+--+
爲什麼mysql不能使用表索引?
日誌表有大約100000行,查詢速度很慢。
推測查詢速度很慢?至少,有關查詢性能的問題需要所有相關表(最好是樣本數據)的CREATE語句以及EXPLAIN的結果。 – Strawberry
好吧,我正在更新它。 – Tobia