全部產品
Search
文件中心

OpenSearch:動態參數

更新時間:Jul 13, 2024

描述

使用者可以在SQL中設定placeholder(?表示),同時傳遞placeholder對應的值。Iquan內部會自動替換。

動態參數主要用於提高Plan Cache命中率,對於查詢模式固定的情境效能提升明顯。

注意動態參數只能替換值,不支援關鍵字或欄位替換。

支援版本

>= Ha3 3.7.0

參數說明

使用者在啟用動態參數的時,需要在kvpair中設定如下的參數:

欄位

含義

樣本

支援版本

iquan.plan.prepare.level

對指定階段的結果使用具體的參數替換"?"號。 預設為jni.post.optimize。

kvpair=...;iquan.plan.prepare.level:jni.post.optimize;...

Ha3 3.7.0 ~ Ha3 3.7.2 該欄位為必要欄位

Beta版本支援該欄位為選填欄位,預設為jni.post.optimize。

dynamic_params

填入要替換的具體值。

注意:類型一致

注意:動態參數是一個二維數組;其中每一個一維數組對應一條SQL。

kvpair=...;dynamic_params=[[1, 1.23, "str"]]

3.7.0以上版本

iquan.plan.cache.enable

根據iquan.plan.prepare.level啟用不同的cache。

在動態參數下,如果啟動了cache功能,iquan會將帶"?"的SQL對應的執行計畫放入cache, 下次再訪問同樣的SQL時候,可以直接從cache中取出plan,極大的節省了時間。

kvpair=...;iquan.plan.cache.enable:true;...

3.7.0以上版本

樣本

  1. 只啟用動態參數:

SELECT i1, cast(? as bigint) FROM t1 WHERE (i2 > 5 AND d3 < 10.1) OR s5 = ?

為了替換掉SQL中的動態參數(也就是"?"), 使用者需要通過kvpair傳入具體的參數,具體如下:

kvpair=...;
                         iquan.plan.prepare.level:jni.post.optimize;
       dynamic_params:[[10, "str5"]];
       ...;

  1. 同時啟用了cache和動態參數:

SELECT
    price,
    title,
    compute(
        longitude,
        latitude,
        city_id,
        CAST(? AS double),
        CAST(? AS double),
        CAST(1 AS bigint)
    ) AS distance
FROM
    store,
    unnest(store.sub_table)
WHERE
    MATCHINDEX('shop', ?)
    AND QUERY(name, ?) 

kvpair參數:

kvpair= ...;
                         iquan.plan.cache.enable:true;
                         iquan.plan.prepare.level:jni.post.optimize;
       dynamic_params:[[119.98844256998, 
                        36.776817017143, 
                        "excellect", 
                        "水果 OR 西瓜"]]
       ...