我得到了一個SQLite數據庫(第一個項目與SQLite),我需要一次刪除大量的記錄,這就像14.000記錄。排隊如下(我更改了名稱以便更好地閱讀):SQLite刪除慢
delete from table_1 where table_2_id in (
select id from table_2 where table_3_id in (
select id from table_3
where (deleted = 1 or
table_4_id in (select id from table_4 where deleted = 1))));
此查詢需要8分鐘時間才能刪除。但是當我做
select * from table_1 where table_2_id in (
select id from table_2 where table_3_id in (
select id from table_3
where (deleted = 1 or
table_4_id in (select id from table_4 where deleted = 1))));
它給了我3秒的結果。
我嘗試使用事務,緩存大小,日記模式,但我沒有得到它的工作,以獲得更好的性能。我錯過了什麼?
創建臨時表(' CREATE TEMP TABLE to_delete AS select table_1_id FROM table1 ...');使用該功能刪除的速度有多快(從table_1中刪除table_1_id到to_delete中)? –
感謝您的快速響應。要創建臨時表,它需要的時間少於一秒,所以看起來性能是正確的。要刪除具有查詢的特定數據「從table_1中刪除where table_1_id in(select id from to_delete)」,那麼它又需要8分鐘。 – user3756056
數據庫文件有多大?你有多少內存?什麼文件系統?網絡? –