2013-11-02 69 views
0

我有一個很大的表,裏面有什麼本質上的日誌條目。對於大多數我的查詢,我需要與最近的條目的表,所以我創建從下面查詢「視圖」:MySQL從查詢中創建表

SELECT t1.store_id, t1.code_id, t1.working, t1.expiration, t1.details, t1.price 
    FROM code_stores t1 
    LEFT OUTER JOIN code_stores t2 
    ON (t1.store_id = t2.store_id AND t1.code_id = t2.code_id AND t1.id < t2.id) 
    WHERE t2.store_id IS NULL 

然後我用我的查詢這個「視圖」。不幸的是,這導致查詢速度緩慢,所以我想以某種方式緩存這個視圖的結果。由於這個視圖每天只會改變幾次(當我可以運行一個查詢來更新緩存表)時,我想創建一個臨時表來存儲這個視圖的結果,並在整個一天中更新它。

我該如何去做這件事?我閱讀了物化視圖,但似乎它們不適用於mysql。更多的幫助將不勝感激。

+0

你爲什麼不添加索引? –

+0

您是否指向特定列添加索引?我經歷過並在任何地方添加了'WHERE'或'JOIN ON',性能仍然很差(每個查詢1秒)。我嘗試過使用'EXPLAIN',但是我已經把頭髮拉出了很長時間,試圖弄清楚這一點。我認爲緩存這種觀點可能會提高性能。 – xur17

+0

看來我的問題是查詢結果的數量。查詢輸出> 1000行。如果我應用LIMIT 20,它將查詢時間減少到13ms。我想我只需要爲此提出一個更好的結果頁面,這不涉及顯示1000行。 – xur17

回答

0

隨着使用臨時表的想法,我建議使用觸發器,以便每次code_store表更改時更新臨時表。

+0

我可以使用觸發器,也可以在後端完成對整個表的更新後強制更新臨時表。無論哪種方式,我仍然不知道如何創建一個基於查詢的臨時表。 – xur17