描述
用戶可以在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以上版本 |
示例
只啟用動態參數:
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"]];
...;
同時啟用了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 西瓜"]]
...