Ich muss eine Tabelle aus einer anderen Datenbank aktualisieren. Ich füge es an und lösche und füge es ein. Einfügen geht schnell, aber Löschen dauerte sehr viel Zeit. Für 200k Aufzeichnungen dauerte es ungefähr 1 Minute. Wie geht es schneller?Slow DELETE in Sqlite
db.execSQL("attach database '" + db_path + "' as db2");
db.beginTransaction();
try {
db.execSQL("DELETE FROM CategoryProduct_MM WHERE PrdID IN (SELECT PrdID FROM db2.CategoryProduct_MM)");
db.execSQL("INSERT INTO CategoryProduct_MM SELECT * FROM db2.CategoryProduct_MM");
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
sqlitebrowser tun die gleiche Operation für 4 Sekunden
Update:
hier ist die Struktur meiner db
CREATE TABLE CategoryProduct_MM(CategoryID INTEGER, PrdID INTEGER)
CREATE UNIQUE INDEX CategoryProduct_MM_CatID_PrdID_idx ON CategoryProduct_MM(CategoryID,PrdID);
CREATE INDEX CategoryProduct_MM_CatID_idx ON CategoryProduct_MM(CategoryID);
CREATE INDEX CategoryProduct_MM_PrdID_idx ON CategoryProduct_MM(PrdID);
können Sie die 'drop-Tabelle' wie folgt verwenden:' db.execSQL ("DROP TABLE IF EXISTS" + CategoryProduct_MM); ' – NSimon
Haben Sie Index auf PrdID? – Selvin
@NicolasSimon Wenn Sie die Tabelle löschen, werden Sie alle Zeilen löschen, während es scheint, dass der Benutzer nur eine Auswahl von Zeilen löschen möchte (genauer gesagt diejenigen, deren 'PrdId' in einer anderen Tabelle vorhanden ist) – user2340612