Медленный выбор в MySQL - PullRequest
1 голос
/ 08 марта 2011

У меня проблемы с запросом в MySQL.Для построения графика я создаю временную таблицу с интервалами 'X SECOND' с этой простой структурой:

CREATE TEMPORARY TABLE intervals (date DATETIME NOT NULL PRIMARY KEY)

и запрашиваю этот SELECT:

SELECT COUNT(dt.Device) AS count, i.date 
FROM intervals i LEFT JOIN device_tracker dt ON 
    i.date <= dt.date AND 
    i.date + INTERVAL X SECOND >= dt.date 
GROUP BY i.date

Device isпервичный ключ и dt.date является индексом.

с 20000 строками в запросе device_tracker AND с интервалом 30-35 занимает около 4-5 секунд.Это нормально?Могу ли я сделать что-нибудь, чтобы улучшить скорость?

Это объяснение:

id  select_type table   type    possible_keys   key      key_len  ref   rows    Extra
-------------------------------------------------------------------------------------------------------------------
1    SIMPLE      i       index   NULL            PRIMARY  8        NULL  29      Using index; Using temporary; Using filesort
1    SIMPLE      dt      ALL     date            NULL     NULL     NULL  21594   

EDIT : Last_time не существует, вместо этого я использую дату.

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

из ответа Гальца:

попробуйте использовать HAVING вместо WHERE: SELECT ... LEFT JOIN ... GROUP BY ... HAVING i.date IS NOT NULL

Это сработало.

0 голосов
/ 08 марта 2011

Возможно, проблема в поле Last_Time в device_tracker. Вы можете попробовать индексировать как по дате, так и по времени последнего ... как в:

CREATE INDEX myGreatIdx ON device_tracker(date, Last_Time);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...