PDF (美國信紙尺寸) - 1.4Mb
PDF (A4) - 1.4Mb
X DevAPI 會針對重複執行的每個 CRUD 語句,透過使用伺服器端預處理語句來改善效能,以便第二次和後續執行。這是內部發生的 — 只要重複使用相同的操作物件,應用程式不需要執行任何額外操作即可使用此功能。
當語句第二次執行,且只有資料值或精確執行結果的值 (例如,不同的 offset()
或 limit()
值) 有變更時,伺服器會為後續執行準備語句,因此再次執行時不需要重新剖析語句。預處理語句重新執行的新值是透過參數綁定提供。當語句透過鏈結一個精確結果的方法 (例如,sort()
、limit()
或 offset()
) 來修改時,會重新準備語句。下列虛擬程式碼及其註解示範了此功能
var f = coll.find("field = :field");
f.bind("field", 1).execute(); // Normal execution
f.bind("field", 2).execute(); // Same statement executed with a different parameter value triggers statement preparation
f.bind("field", 3).execute(); // Prepared statement executed with a new value
f.bind("field", 3).limit(10).execute(); // Statement reprepared as it is modified with limit()
f.bind("field", 4).limit(20).execute(); // Reprepared statement executed with new parameters
請注意,若要善用此功能,必須在語句的重複執行中使用相同的操作物件。請看這個範例
for (i=0; i<100; ++i) {
coll.find("field = :field").bind("field", i).execute();
}
此迴圈無法善用預處理語句功能,因為 coll.find()
的操作物件會在 for
迴圈的每次迭代中重新建立。現在,請看這個範例
var f = coll.find("field = :field");
for (i=0; i<100; ++i) {
f.bind("field", i).execute();
}
重複語句會準備一次,然後重複使用,因為 coll.find()
的相同操作會在 for
迴圈的每次迭代中重新執行。
預處理語句是 Session
的一部分。當 Client
重設 Session
(例如使用 Mysqlx.Session.Reset
) 時,預處理語句會被捨棄。