PDF (美式信紙) - 1.2Mb
PDF (A4) - 1.2Mb
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
)時,預處理語句會被捨棄。