[英]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.