Bu benim tablolar: tarih colum ve test_log indekslendiyseoptimize MySQL sorgu
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
tablo test_dates:
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`);
Bugüne başına günlükleri saymak için bu sorgu var tablo zaman sütununda endekslenir.
Ancak bu sorguyu açıklarken "ALL" ve NULL anahtarını sorguladım.
+-----+--------------+--------+-------------+--------+----------------+----------+----------+------+--------+-----------+------------------------------------------------+--+
| 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) | |
+-----+--------------+--------+-------------+--------+----------------+----------+----------+------+--------+-----------+------------------------------------------------+--+
Neden mysql tablo dizinlerini kullanamaz?
Günlük tabloları yaklaşık 100000 satır var ve sorgu çok yavaş.
Muhtemelen sorgu yavaş? Minimum olarak, sorgu performansıyla ilgili sorular, tüm ilgili tablolar için CREATE ifadelerini (ve tercihen örnek verileri de) ve EXPLAIN sonucunu gerektirir. – Strawberry
Tamam, güncellemeyi yapıyorum. – Tobia