Ich habe einen „events“ TischMySQL Indizes nicht in einer SELECT-Klausel Unterabfrage
table events
id (pk, auto inc, unsigned int)
field1,
field2,
...
date DATETIME (indexed)
Ich versuche, Löcher in der trafic zu analysieren (die Momente, in denen es 0 Ereignis in einem Tag)
ich versuche, diese Art von Anfrage
SELECT
e1.date AS date1,
(
SELECT date
FROM events AS e2
WHERE e2.date > e1.date
LIMIT 1
) AS date2
FROM events AS e1
WHERE e1.date > NOW() -INTERVAL 10 DAY
Es hat eine sehr große Menge an Zeit Hier wird die explai nimmt
n
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
| 1 | PRIMARY | t1 | range | DATE | DATE | 6 | NULL | 1 | Using where |
| 2 | DEPENDENT SUBQUERY | t2 | ALL | DATE | NULL | NULL | NULL | 58678524 | Using where |
+----+--------------------+-------+-------+---------------------+---------------------+---------+------+----------+-------------+
2 rows in set (0.00 sec)
Getestet auf MySQL 5.5
Warum kann mysql die DATE Indexe verwenden? ist es wegen einer Unterabfrage?
Wie viele Zeilen gibt es in Ihrer 'events' Tabelle? – 1000111
ca. 60 Millionen – nemenems
kann ein Tippfehler sein ** WO e1> JETZT() -INTERVAL 10 TAG **. sollte das sein: 'WHERE e1.date> NOW() -INTERVAL 10 DAY' – 1000111