天天看點

MySQL核心月報 2014.09-MariaDB· 性能優化·Extended Keys

mariadb 10.0.8增加了一種新的執行計劃——extended keys。

它充分利用了innodb的隐藏列來做執行計劃,因為我們都知道innodb的索引組織表會把主鍵放在最末尾,是以實際上每個索引最後都包含了主鍵。

打開和關閉這個優化器選項的指令如下:

enable:

disable:

mariadb 10.0.8中預設選項是 'extended_keys=off'. mariadb 10.0.9開始預設選項是 'extended_keys=on'.

看一個例子:

有一個dbt-3/tpc-h 測試中用到的sql如下

這個查詢是尋找發生在1992-07-01 并且零售價格高于2095的orderkeys.

通過 extended keys, 這個查詢可以通過下面的計劃執行:

掃描i_p_retailprice索引獲得p_retailprice>2095的行,再從 extended keys中讀取p_partkey(主鍵)的值。 對于每一個p_partkey的值,通過對lineitem表的i_l_partkey索引掃描,從 extended index中擷取l_orderkey(主鍵)。 對于每一個被選中的l_orderkey值,再通過i_o_orderdate索引去查找o_orderkey(主鍵)的值。 這種通路方式所有的通路資料都沒有回表,是以性能好的多。

下面是執行計劃:

繼續閱讀