SQLITE_STMT 擴充套件實作了一個 同名專用虛擬表格,提供與 已準備好的陳述式 相關的所有 資料庫連線 的資訊。
SQLITE_STMT 擴充套件包含在 合併 中,但預設為停用。使用 SQLITE_ENABLE_STMTVTAB 編譯時期選項來啟用 SQLITE_STMT 擴充套件。SQLITE_STMT 擴充套件也可以在執行時期載入,方法是使用 https://sqlite.dev.org.tw/src/file/ext/misc/stmt.c 的原始碼將擴充套件編譯成共用函式庫或 DLL,並遵循 編譯可載入擴充套件 的說明。
SQLITE_STMT 擴充套件在 命令列外殼 的預設建置中啟用。
SQLITE_STMT 虛擬表格是一個唯讀表格,可以直接查詢以存取目前資料庫連線中所有已準備好陳述式的資訊。例如
SELECT * FROM sqlite_stmt;
在呼叫 sqlite3_close() 之前,可以立即執行上述陳述式,以確認所有已準備好的陳述式都已 完成,並協助識別和追蹤已「外洩」且未完成的已準備好陳述式。
SQLITE_STMT 虛擬表格也可以用於存取已準備好陳述式的效能資訊,以協助最佳化應用程式。例如,若要找出從未使用過的 已準備好陳述式 使用了多少記憶體,可以執行
SELECT sum(mem) FROM sqlite_stmt WHERE run=0;
SQLITE_STMT 虛擬表格提供的欄位由下列假設的 CREATE TABLE 陳述摘要
CREATE TABLE sqlite_stmt( sql TEXT, -- Original SQL text ncol INT, -- Number of output columns ro BOOLEAN, -- True for "read only" statements busy BOOLEAN, -- True if the statement is current running nscan INT, -- Number of full-scan steps nsort INT, -- Number of sort operations naidx INT, -- Number of automatic index inserts nstep INT, -- Number of byte-code engine steps reprep INT, -- Number of reprepare operations run INT, -- Number of times this statement has been run mem INT -- Heap memory used by this statement );
未來版本可能會新增新的輸出欄位,並可能會變更舊有欄位的順序。下列提供有關 SQLITE_STMT 虛擬表格中每個欄位意義的詳細資料
sql:已準備陳述的原始 SQL 文字。如果已準備的陳述是使用 sqlite3_prepare() 介面編譯,則 SQL 文字可能尚未儲存,如果是這樣,此欄位將為 NULL。
ncol:查詢結果集中欄位的數量。對於 DML 陳述,此欄位的值為 0。
ro:唯讀欄位。如果 SQL 陳述為查詢,則此欄位為 true (非零);如果為 DML 陳述,則為 false (零)。
busy:如果已準備的陳述目前正在執行,則此欄位為 true。換句話說,如果已在 已準備的陳述 上呼叫 sqlite3_step() 至少一次,但尚未呼叫 sqlite3_reset() 重設,則此欄位為 true。
nscan:此欄位是 位元組碼引擎 在全表掃描中逐步執行表格的次數。如果此欄位為大數字,可能表示有機會透過新增索引來提升效能。此欄位等於 SQLITE_STMTSTATUS_FULLSCAN_STEP 值。
nsort:此欄位是 位元組碼引擎 必須排序的次數。此欄位中的正值可能表示有機會透過新增索引來提升效能,這將使查詢結果自然以所需的順序顯示。此欄位等於 SQLITE_STMTSTATUS_SORT 值。
naidx:此欄位是已插入到自動索引中的列數。此欄位中的正值可能表示透過新增取代自動索引的名稱索引來改善效能的機會。此欄位等同於SQLITE_STMTSTATUS_AUTOINDEX值。
nstep:此欄位是已針對準備好的陳述式執行的位元組碼引擎作業數。此欄位可用作陳述式已使用的 CPU 時間的代理。此欄位等同於SQLITE_STMTSTATUS_VM_STEP值。
reprep:此欄位是陳述式因架構變更或參數繫結變更而必須重新準備的次數。此欄位等同於SQLITE_STMTSTATUS_REPREPARE值。
run:此欄位是陳述式已執行的次數。此欄位等同於SQLITE_STMTSTATUS_RUN值。
mem:此欄位是準備好的陳述式所使用的堆積儲存體位元組數。此欄位等同於SQLITE_STMTSTATUS_MEMUSED值。
此頁面最後修改於 2022-01-08 05:02:57 UTC