簡體   English   中英

是否可以使此SQL查詢運行得更快?

[英]Is possible to make this SQL query run faster?

兩個簡單的表

基本

+--------+
|id|value|
+--------+
|  |     |
+--------+

事件表(包含大量數據..)

+--------------+
|id|event| date|
+--------------+
|  |     |     |
+--------------+

然后,我想擁有所有與它們的上一個 事件相對應的base.value的列表(包括沒有事件條目的值)

+----------------+
|id|lastEvt|value|
+----------------+
|  |       |     |
+----------------+

這是(有效但很慢的嘗試)

SELECT *
  FROM  ( 
    SELECT base.id,
           event.event,
           base.value
      FROM base
           LEFT OUTER JOIN event
                        ON base.id = event.id
     ORDER BY event.date DESC
) 
AS res
 GROUP BY res.id;

我懷疑有一種更好/更快的查詢方法,但是我不知道如何。

SELECT b.id, b.value, e.event
    FROM base b
        LEFT JOIN (SELECT id, MAX(date) AS LastEventDate
                       FROM event
                       GROUP BY id) q
            INNER JOIN event e
                ON q.id = e.id
                    AND q.LastEventDate = e.date
            ON b.id = q.id
SELECT 
b.id, b.value, e.event
FROM Base b 
LEFT JOIN Event e ON (b.id = e.id)
ORDER BY e.date DESC
GROUP BY b.id

我假設您在這兩個表上都有正確的索引。

也許我缺少了一些東西,但似乎應該可以:

SELECT base.id, 
       base.value, 
       event.date 
FROM 
       base 
       LEFT OUTER JOIN 
           event ON base.id = event.id 
ORDER BY event.date DESC 
GROUP BY base.id

至於上面的查詢是否更快,我認為這是因為它不包含任何子查詢,但是您必須進行基准測試才能進行驗證。

暫無
暫無

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

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