2014-10-23 2 views
0

У меня есть следующая таблицаMySQL выбрать, где подзапрос медленно

id | firstname | lastname | email    | date 
    1 | steven | smith | [email protected]  2013-06-10 04:01:25 
    2 | Bill  | Johnson | [email protected] | 2014-06-10 04:01:25 
    3 | steven | smith | [email protected] | 2014-10-10 12:01:25 

Этот запрос возвращает письма, которые имеют самую последнюю дату так будет возвращать номер строки 2 и 3. Он не возвращает строки номер 1, как дата меньше, чем дата номера строки 3

SELECT DISTINCT 
    us.email, 
    us.* 
FROM 
    `users` AS us 
WHERE us.`users` = 
    (SELECT 
    MAX(`date`) 
    FROM 
    `users` AS u 
    WHERE u.email = us.email) 

запрос отлично подходит для небольшого количества данных работает, но когда я пытаюсь запустить его на 40k строк она занимает очень много времени. Более 5 минут

Этот запрос ответ кто-то писал от моего предыдущего вопроса так же ссылка SQL скрипку

http://sqlfiddle.com/#!2/338f0/1

+0

нет, спасибо! Я добавил индекс по дате и по электронной почте – meWantToLearn

+0

Посмотрите, что 'EXPLAIN' и/или EXPLAIN EXTENDED' сообщает вам о вашем запросе ... это не будет хорошей новостью, хотя –

ответ

0

Вы можете попробовать добавить индекс столбца электронной почты (запустить этот код после создания таблицы) :

CREATE INDEX i_users_email 
    ON users (email); 
Смежные вопросы