2011-10-31 53 views
0

有時我需要從CoreData數據存儲中刪除10,000行,並且每次循環讀取這些記錄時間過長。使用SQL直接刪除我的數據庫中的CoreData數據

有沒有辦法使用SQL直接從我的數據存儲快速刪除?

+1

你能發表你正在使用的代碼嗎?如果你不能,你是否在每次刪除後保存? –

回答

1

修改CoreData存儲直接面臨破壞數據庫的風險,並且非常不鼓勵。您最好的選擇是使用能夠一次選擇要刪除的所有行的CoreData查詢進行刪除。

當我說它具有破壞風險時,我並不是說任何東西都會對您的SQL查詢造成影響,但是CoreData還會在數據庫中插入大量元數據以幫助其編制索引。

+0

這就是我所知道的,據我所知,我必須加載所有我想刪除的對象,然後通過它們循環刪除它們 - 非常緩慢。 – Slee

+0

你應該能夠將它們全部加載到一個數組中,然後做一個for語句將它們全部標記爲已刪除,然後每隔一段時間進行一次提交。如果可能的話,您應該提交每100條記錄,以保持內存佔用。您可能還需要將您的負載分頁,而不是一次將所有這些記錄都記錄下來。 – James

+0

是的,在處理10,000多條記錄時它仍然有點慢 - 我將使用批處理大小並在X記錄數量後進行提交,看看我能否獲得更好的性能 - 謝謝 – Slee