在articleAuthors表中有超過50個不同的作者的假設下,我會預先查詢該組件並限制爲您需要的50個記錄。確保(author_id)上存在索引。另外,請確保您的作者表在(id)上有一個索引。通過計數在prequery降查詢更改爲
select
a.*,
JustAuthorIDs.cntPerAuthor
from
(select
aa.author_id,
count(*) cntPerAuthor
from
articleAuthors aa
group by
aa.author_id
order by
cntPerAuthor DESC
limit 50) JustAuthorIDs
JOIN Authors a
on JustAuthorIDs.author_ID = a.id
順序將預先沖洗,並用最大計數預先訂購第一和後50個記錄停止。然後,簡單地連接到authors表以獲取名稱和其他內容。
我擁有基於author_ID的組而不是名稱,因爲如果您有兩位作者稱爲「billboard」......實際的ID將在他們兩個之間不同。
現在,以上是一個查詢,您將永遠需要每次查詢所有百萬條記錄。對於這樣的事情,在authors表中添加一個「AuthoredItems」列可能會更好。然後,通過authorArticles表上的觸發器,當添加或刪除條目時,只需更新作者表上一個作者的最終計數。然後,在「AuthoredItems」列中創建一個索引。然後,您可以通過做超級簡化查詢
select a.*
from authors a
order by a.AuthoredItems
limit 50
這些表上的索引是什麼?您可以發佈查詢的解釋輸出嗎? – Ben
快速提問......文章中有超過50位作者的作者表? – DRapp
@Ben - On'authors'表我在'author_name'上有一個全文索引,'id'上有主鍵索引。在'articleAuthors'表上,我有'author_id'上的鍵索引,'article_id'上的鍵索引和'id'上的主鍵索引。我會暫時發佈解釋輸出。 – bodacydo