Это очень простой запрос занимает много времени:Могу ли я оптимизировать этот запрос?
SELECT text, url, docid
FROM retrieve
LEFT JOIN citations2
ON citations2.fromdoc = retrieve.docid
WHERE citations2.todoc IS NULL
LIMIT 10;
Он имеет левое соединение с условием NULL ... это может быть причиной? Я поставил индексы повсюду.
Вот лог медленных запросов:
# Time: 130404 8:00:31
# [email protected]: em[em] @ zebra [130.239.162.142]
# Query_time: 27.006579 Lock_time: 0.000019 Rows_sent: 0 Rows_examined: 90682
use em_bg04;
SET timestamp=1365055231;
SELECT text, url, docid FROM retrieve LEFT JOIN citations2 ON citations2.fromdoc = retrieve.docid WHERE citations2.todoc IS NULL LIMIT 10;
Вот схематическое изображение задействованных таблиц, вместе с размерами (держать прокрутки вниз, чтобы увидеть результаты EXPLAIN
для запроса)
Вот вывод EXPLAIN:
Таким образом, кажется, что он должен пройти через весь стол ... Я, конечно, читал this, но я не могу понять это. Итак, есть ли способ сделать этот запрос быстрее?
Попробуйте добавить где положение в '' ON' пункта ВЫБРАТЬ текст, URL, DocId ОТ получить LEFT JOIN citations2 ON citations2.todoc IS NULL AND citations2.fromdoc = retrieve.docid LIMIT 10; ' – Meherzad
@Meherzad Теперь гораздо лучше! Спасибо (если вы скопируете свой комментарий к ответу, я его приму) – dsign