簡體   English   中英

如何選擇行數作為主查詢結果的子查詢

[英]How can I select the count of rows as a subquery of results from main query

僅在WHERE places.x < 5為true時,我才嘗試在一個地方收集項目的數量。 這樣做的原因是, at_placesplaces表都包含數萬行。

這是我要嘗試做的一般想法; 但是我無法測試它,因為它需要很長時間才能完成。 我認為,能夠在一個查詢中同時包含計數的獲取和位置,比運行后續查詢獲取返回的每個位置的計數要快得多。

SELECT  `places`.`id`, 
        `places`.`name`,
        (SELECT COUNT(*) FROM `at_places` WHERE places_id=places.id) AS count
FROM `places`
WHERE places.x < 5

您可能會發現顯式連接效果更好:

select p.id, p.name, ap.cnt
from places p join
     (select ap.places_id, count(*) as cnt from at_places ap group by ap.places_id) ap
     on p.id = ap.places_id
where p.x < 5

我相信您的性能問題是由於以下事實造成的:子查詢對外部查詢中的每一行執行一次。 at_places.places_id上的索引也應加快查詢速度。

暫無
暫無

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

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