簡體   English   中英

如何優化mysql子查詢?

[英]How to optimze mysql subquery?

需要幫助來優化我的查詢,當前它運行大約22秒,並且該表中有110萬行。 這是我的查詢。 該查詢返回用戶的最新時間。

SELECT 
    t.id, t.user_id, t.created
FROM
    timesheets t
WHERE
    t.user_id IN (41649 , 41901,41899,41482,41648,41897,41652,
        41483,41900,41143,41907,16,42191,42195,42194,42136,42193,42190,42484,42485,42486,42504,
        42052,42797,42997,42868,42847,42505,42964)
    AND t.id = (SELECT 
                    MAX(sub_t.id)
                FROM
                    timesheets AS sub_t
                WHERE
                    sub_t.user_id = t.user_id
                AND sub_t.description = 'in')

我也有該表的表索引(id,user_id,創建的,描述)。 任何建議都非常感謝。 謝謝

多列索引(user_id, id)可能會有所幫助。

另外,也許使用聯接而不是相關子查詢。

SELECT 
    t.id, t.user_id, t.created
FROM
    timesheets t
JOIN (
    SELECT MAX(id) AS maxid
    FROM timesheets t
    WHERE user_id IN (41649 , 41901,41899,41482,41648,41897,41652,
            41483,41900,41143,41907,16,42191,42195,42194,42136,42193,42190,42484,42485,42486,42504,
            42052,42797,42997,42868,42847,42505,42964)
        AND description = "in"
    GROUP BY user_id) t1 
ON t.id = t1.maxid

我假設id是表的主鍵,所以它是唯一索引。

暫無
暫無

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

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