[英]Efficiency using triggers inside attached database with SQLite
情況
我使用多個存儲數據庫作為一個中央“經理”數據庫的附件。
AUTOINCREMENT
索引。 INSERT
事務的頻率很高,因此我必須手動觸發WAL檢查點。 除此之外,我還見過最大2GB的日志。 當前解決方案
我使用參數綁定到預先創建的語句來插入數據集。
INSERT INTO datatable VALUES (:idx, ...);
這樣做時,我記得開始和結束索引。 接下來,我將其綁定到注冊表表中的插入語句:
INSERT INTO regtable VALUES (:idx, datatable);
我的查詢確定要返回的數據集,如下所示:
SELECT MIN(rowid), MAX(rowid), tablename
FROM (SELECT rowid,tablename FROM entryreg LIMIT 30000)
GROUP BY tablename;
之后,我查詢
SELECT * FROM datatable WHERE rowid >= :minid AND rowid <= :maxid;
在這里我使用的每個預定義報表datatable
和兩個變量綁定到第一個查詢的結果。
這太慢了。 創建注冊表表后,插入速度會大大降低,我無法達到基准速度。
可能的解決方案
我可以想象有幾種其他方法可以完成:
創建所有索引的視圖,作為所有表索引的UNION
或OUTER JOIN
。 這不能在附加數據庫上持久執行。
在創建表時為填入注冊表的表創建INSERT
/ REMOVE
觸發器。 這不能在附加數據庫上持久執行。
在數據庫創建時為CREATE TABLE
創建觸發器,該觸發器將創建上述觸發器。 需要用戶功能。
問題
現在,在我添加用戶功能(這是我以前從未做過的事情)之前,如果有機會解決我的性能問題,我想尋求一些建議。
main
模式),這些視圖和/或觸發器在以后通過ATTACH
連接到數據庫時可以工作嗎? AFTER INSERT
,每插入一行后,觸發器AFTER INSERT
就會觸發。 如果將內容插入到另一個表中,這是否意味着我將事務數從2增加到1 + N? 還是有一種機制可以加速觸發的交互? 第一種情況會使事情變慢。 FULL OUTER JOIN
(我需要從其他JOIN
命令創建它 )比每次用插入事務填充注冊表更快? 我們說的是每秒大約10個事務,平均有1000個元素(插入),而每2秒有30000個查詢(查詢)。 在多線程模式下打開sqlite3數據庫,通過單獨的線程處理insert / update / query / delete函數。 我更喜歡將查詢結果傳輸到stl容器進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.