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(主鍵)的值。 這種通路方式所有的通路資料都沒有回表,是以性能好的多。
下面是執行計劃: