2015-03-22 5 views
-1

У меня есть следующий запрос, хотя он работает это занимает очень много времени, чтобы загрузитьMYSQL запрос занимает много времени, чтобы загрузить

SELECT name, t1.* 
FROM user, driver_tracker t1 
LEFT JOIN driver_tracker t2 
ON (t1.phone = t2.phone AND t1.id < t2.id) 
WHERE user.phone = t1.phone 
AND companyid = 'asus' 
AND t2.id IS NULL 
ORDER BY name 
+0

Индексы? Структура таблицы? Объяснить план? Объяснение противоречивой логики в объединении и фильтрации? – symcbean

ответ

1

Вот ваш запрос правильно выражается:

SELECT u.name, t1.* 
FROM user u JOIN 
    driver_tracker t1 
    ON u.phone = t1.phone LEFT JOIN 
    driver_tracker t2 
    ON (t1.phone = t2.phone AND t1.id < t2.id) 
WHERE u.companyid = 'asus' AND t2.id IS NULL 
ORDER BY name; 

(Обратите внимание на замену запятой в предложении from с правильным явным соединением. Простое правило: никогда не используйте запятые в предложении from.)

Рекомендуемые индексы: user(companyid, phone, name) и driver_tracker(phone, id).

Смежные вопросы