我有一張大桌子。使用big-table-join優化查詢
我們稱之爲'獨角獸'。
和第二表「農民」。
結構:
農民
- ID
- 名
- ...更多領域
獨角獸
- ID
- farmer_id
- ...更多領域
而且有查詢:
SELECT
f.id,
f.name,
COUNT(*)
FROM
farmers f
LEFT JOIN unicorns u
ON u.farmer_id = f.id
GROUP BY f.id
當然表是真名叫不是這樣的,有更多的領域等等。但在我的例子中,我只留下了最重要的東西。
問題是系統增長,並且有太多獨角獸。百萬。
而這個查詢(就像這個)在農民列表頁面上執行。
頁面加載速度並不像以前那麼快,因爲我們每次加載頁面時都會加入數百萬個表格。
問題是:
- 我們真的需要顯示每個農民的獨角獸列表中的計數。
- 我們需要提高頁面加載速度。
如果你需要優化這個,你會如何實現這個結果?
你會推薦什麼?
P.S.
就我個人而言,我認爲我需要從主查詢中排除大表連接,分別計算獨角獸數量並將它們存儲在高速緩存存儲器中,重新計算它們。也許有最好的辦法,所以我想聽聽別人的意見。
都是'id'字段'PRIMARY KEY's,你有'unicorns.farmer_id'上的索引嗎? – TheWolf 2014-10-03 10:45:47
是的,我知道主鍵,外鍵和索引 – 2014-10-03 10:48:24
您是否嘗試過直接執行查詢(使用phpmyadmin,shell,...)來檢查執行時間,並確保它真的是這個查詢減慢頁面加載? – TheWolf 2014-10-03 10:50:52