簡體   English   中英

調整SQL查詢以獲得更好的性能

[英]tuning a SQL query for better performance

我有此SQL語句有效,但需要一段時間才能執行

我有一個活動表,我需要找到每個ID的最后一個活動和關聯的用戶。

SELECT id, date_time, user  
FROM activity_log a 
WHERE a.date_time = (SELECT MAX(a1.date_time)
                FROM activity_log a1
                WHERE a.id = a1.id
                GROUP BY id)
ORDER BY `id` desc limit 0, 100

我在date_time字段和id字段上有一個非唯一索引。

我們如何在此查詢上縮短執行時間?

當前您擁有的是一個相關子查詢,該子查詢需要對從外部選擇返回的每一行進行計算。

相反,將整個id和max(date_time)數據集作為子查詢返回並加入其中。 只需走一趟就可以訪問activity_log表來找到每個max(date_time),這將大大改善您的運行時間。

SELECT a.id, a.date_time, a.user  
FROM activity_log a 
INNER JOIN (
  SELECT id, MAX(date_time) as date_time
                FROM activity_log 
                GROUP BY id) a1
ON a.id = a1.id and a.date_time = a1.date_time
ORDER BY `id` desc limit 0, 100

如果您嘗試這樣做,會發生什么:

SELECT id, date_time, user   
FROM activity_log a  
WHERE EXISTS 
(SELECT 1 FROM (SELECT ID,MAX(a1.date_time) maxdate
                FROM activity_log a1 
                GROUP BY ID) a1 WHERE A1.ID=A.ID AND A1.MAXDATE=a.date_time)
ORDER BY `id` desc limit 0, 100 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM