slowquery что не так? - PullRequest
       14

slowquery что не так?

1 голос
/ 23 декабря 2010

Я поймал этот запрос в журнале slowquerys.

SELECT GREATEST( IFNULL(`twk-status`.`status`,0) , `groups`.`status`)
FROM `groups` 
LEFT JOIN `twk-status` ON
    (`twk-status`.`groupID` = `groups`.`ID`
    AND `twk-status`.`startdate` <= FROM_UNIXTIME(1317204000)
    AND `twk-status`.`enddate` >= FROM_UNIXTIME(1317204000)
    AND ISNULL(`twk-status`.`deleted`)
    AND `twk-status`.`groupID` = 11)
WHERE `groups`.`ID` = 11;

Я выполнил запрос с помощью EXPLAIN, выдав следующий отчет:

id  table       possible_keys                  key 
1   twk-status  groupID,groupID_2,enddate      NULL
1   groups      PRIMARY                        PRIMARY

Это означает, что mysql не использовал ни одну из трех возможных клавиш для таблицы twk-status . Правильно?

Вот ключи от twk-status

groupID (groupID)
groupID_2 (groupID, startdate, enddate, deleted)  
enddate (enddate, createdate, deleted)

В запросе используется groupID, startdate, enddate, удалено Я думал, что groupID_2 будет ключом.

Или это проблема запроса, а не индекса?

Спасибо заранее.

1 Ответ

1 голос
/ 23 декабря 2010

Из вашего объяснения я могу судить, что порядок или таблицы поменялись местами.

Для каждой записи из twk-status выполняется поиск соответствующей записи из groups, поскольку у вас есть PRIMARY KEY условие соединения среди других (twk-status.groupID = groups.ID)

Однако я почти уверен, что с этим EXPLAIN что-то не так, потому что MySQL не может поменять порядок на LEFT JOIN.

Не могли бы вы опубликовать точный вывод EXPLAIN?

Обновление:

При построении планов MySQL проверяет наличие искомых постоянных значений в индексированных полях.

Некоторые из этих проверок не пройдены. Невозможно точно сказать, какой именно, но у вас либо нет groupID = 11 в twk-status, либо запись с enddate >= FROM_UNIXTIME(1317204000).

MySQL просто заменил все соединение пустым значением строки для twk-status и вернет его вместе с данными для группы с groupID = 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...