簡體   English   中英

MYSQL:查詢2表用union很慢,如何改進?

[英]MYSQL: Query 2 tables with union is very slow, how to improve?

我想同時查詢2個表(幾乎)相同的行。 因此,我想獲得最近的5個條目(按日期排序,總計),無論它們來自哪個表

到目前為止,我試過這個:

SELECT date, name, text FROM `table_A` 
UNION 
SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5

不幸的是,這個查詢大約需要20秒(兩個表都有~300.000行)。

當我這樣做時:

SELECT date, name, text FROM `table_A` ORDER BY date desc LIMIT 5

要么

SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5

查詢只需幾毫秒。

所以我的問題是 :如何提高我的查詢速度,或者我應該用什么選擇查詢來獲取兩個表中的5個最新行?

在組合之前,在每個表中選擇最近的5行。

SELECT *
FROM (
    (SELECT date, name, text FROM table_A ORDER BY date DESC LIMIT 5) 
    UNION
    (SELECT date, name, text FROM table_B ORDER BY date DESC LIMIT 5)
) x
ORDER BY date DESC
LIMIT 5

您的查詢的問題在於它首先合並整個表並在執行排序和限制之前刪除重復項。 合並的表沒有索引,因此該部分很慢。

暫無
暫無

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

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