1

Это мой запрос, для выполнения требуется много времени. Можно ли использовать внутреннее соединение? Я работаю только с одним столом.Subselect bad performance

SELECT imei,csv_data_table.time,phone_model,test_unique_id 
FROM verveba_mos.csv_data_table 
WHERE time = (SELECT MAX(time) FROM csv_data_table 
       T1 WHERE csv_data_table.imei=T1.imei) 
+0

Можете ли вы объяснить больше, что хотите ?. @ p.g – zahed

+0

У вас есть указатель на 'time' и/или' T1.imei'? – Trinimon

+0

[_Groupwise max_] (http://mysql.rjweb.org/doc.php/groupwise_max). –

ответ

0

Вы можете использовать JOIN или NOT EXISTS(), чтобы сделать это, это не обязательно означает, что он будет быстрее:

EXISTS():

SELECT imei,csv_data_table.time,phone_model,test_unique_id 
FROM verveba_mos.csv_data_table t 
WHERE NOT EXISTS(SELECT 1 
       FROM csv_data_table s 
       WHERE t.imei= s.imei 
        AND s.time > t.time) 

JOIN:

SELECT t.imei,t.time,t.phone_model,t.test_unique_id 
FROM verveba_mos.csv_data_table t 
JOIN(SELECT s.imei,MAX(time) as max_t 
    FROM csv_data_table s 
    GROUP BY s.imei) p 
ON(t.imei= p.imei and t.time = p.max_t) 
+0

это quey dat u дал как ответ показывает ошибку –

+0

Да, опечатка, с ошибкой столбец. @ p.g Теперь. – sagi

+0

Я хочу использовать внутреннее соединение и сократить время выполнения, возможно. Пожалуйста, покажите мне, как .. Результат должен быть таким же, как и в запросе, который я получил –

0
SELECT t1.imei, t1.time, t1.phone_model, t1.test_unique_id 
FROM csv_data_table t1 
JOIN (select imei, max(time) time from csv_data_table group by imei) t2 
    ON (t1.imei = t2.imei and t1.time = t2.time) 

Вы также должны рассмотреть возможность размещения индекса на csv_data_table(imei, time), если у вас его еще нет.

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

  • Нет связанных вопросов^_^