SQLITE UPSERT
でパフォーマンスが向上する理由は何UNIQUE ON CONFLICT IGNORE
ですか?
テスト#1では、
CREATE TABLE FREQMARY(
VALUE CHAR(40),NUMERICVALUE FLOAT, DATETIMEVALUE CHAR(40), COUNT INT, LENGTH INT)
と
CREATE UNIQUE INDEX IX_MARY ON FREQMARY(VALUE).
テスト#1では、次のUPSERTを使用します。
INSERT OR REPLACE INTO FREQMARY(Value, NumericValue, DateTimeValue, Count, Length)
VALUES ('Braintree Road',NULL,NULL, COALESCE((SELECT Count+1 FROM FREQMARY WHERE Value='Braintree Road'), 1),14)
テスト#2では、
CREATE TABLE FREQMARY(
VALUE CHAR(40) UNIQUE ON CONFLICT IGNORE ,NUMERICVALUE FLOAT, DATETIMEVALUE CHAR(40), COUNT INT, LENGTH INT)
テスト#2では、テスト#1と同じUPSERT
ものを使用します。
INSERT OR REPLACE INTO FREQMARY(Value, NumericValue, DateTimeValue, Count, Length)
VALUES ('Braintree Road',NULL,NULL, COALESCE((SELECT Count+1 FROM FREQMARY WHERE Value='Braintree Road'), 1),14)
100000UPSERTSごとにBEGINTRANSACTIONとENDTRANSACTIONでラップされた1,500,000UPSERTSを使用すると、テスト#1の完了には10時間かかります。
100000UPSERTSごとにBEGINTRANSACTIONとENDTRANSACTIONでラップされた1,500,000UPSERTSを使用すると、テスト#2の完了には18分かかります。
パフォーマンス がSQLITE UPSERT
大幅に向上した理由を教えてUNIQUE ON CONFLICT IGNORE
ください。