2017-02-28 56 views
0

我有一個視圖,從2個表中查詢不經常更改(他們每天更新一次兩次),並有最多2000和1000行)。MySQL查看性能TEMPTABLE還是MERGE?

哪個算法應該表現更好,MERGE或TEMPTABLE?

想知道,MySQL會緩存查詢結果,使TEMPTABLE成爲我的最佳選擇?

閱讀https://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html我明白,基本上MERGE算法會將視圖代碼注入調用它的查詢中,然後運行。 TEMPTABLE算法將使視圖首先運行,並將其結果存儲到臨時表中,然後使用。但沒有提到緩存。

我知道我可以選擇自己實現物化視圖(http://www.fromdual.com/mysql-materialized-views)。 MySQL可以自動緩存TEMPTABLE結果並使用它嗎?

回答

1

哪種算法?它取決於特定的查詢和模式。 通常優化器選擇了更好的方法,並且不應指定。

但是...有時候,優化器會選擇非常糟糕的方法。那時,唯一真正的解決方案就是不使用視圖。也就是說,有些視圖無法優化,以及等效的SELECT

如果您想討論特定情況,請提供SHOW CREATE VIEWSHOW CREATE TABLEs,以及調用視圖的SELECT。並構建等效的SELECTSELECTs也包括EXPLAIN