簡體   English   中英

MySQL查詢:加入或分開

[英]Mysql query : joined or separate

我有兩個表:

一種稱為數據 ,每個ID僅一行(唯一)。 第二個稱為圖像 ,每個ID有3行。

每次頁面加載時,我都想獲取5個不同ID的數據和一張圖像。

現在我的問題是:兩個單獨的SELECT查詢或一個都結合在一起的查詢。

查詢:

...

$all = $row["iD"] // includes **5** last iDs - fetched from DB
$all = implode(',',$all);

SELECT Name, Address FROM data WHERE iD IN($all);
SELECT url FROM images WHERE iD IN ($all) LIMIT 1;

我已經有3個其他選擇查詢頁面上,所以我想知道什么是最好的關於性能,更大的一個-加入了兩個小-更快的查詢。

如果加入,這兩個將如何加入?

您每個ID有三張圖片,並希望最后插入的圖像(又稱“最新內容”)中每個ID一張圖片?

然后,您可以像這樣通過組合使用簡單的自然聯接和分組:

SELECT d.Name, d.Address, MAX(i.url) 
FROM data d, images i
WHERE i.iD = d.iD
GROUP BY d.Name, d.Address
ORDER BY d.iD DESC
LIMIT 5

大多數情況下,最好組合選擇以跳過程序設計開銷(例如,在循環本身中調用mysql_query())。 但是有時它取決於基礎數據。

由於您的查詢將進入完全獨立的表,因此建議您使用2個獨立的查詢:這樣可使結果集更小,並且更有可能至少有一個保留在查詢緩存中,

關於第二個查詢:您了解嗎,這不能保證會獲取特殊的URL,但是可以嗎? 通常是第一個通過密鑰,但不能保證如此。

有關性能問題的答案,請參見JOIN查詢與多個查詢 我從那里可以了解到,性能問題取決於具體情況,因此您應該同時測試兩者。

對於加入,您可以這樣做;

SELECT User.iD, User.Name, User.Address, Image.url
FROM images as Image
JOIN data as User
  ON Image.iD = User.iD
WHERE Image.iD IN ($all)
LIMIT 1;

它尚未經過測試,因此您應該將其與一粒鹽一起服用。 這至少是一個起點。

暫無
暫無

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

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