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)
在Test #2中,我们使用与Test#1UPSERT
相同的方法,
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)
每 100000 个 UPSERTS 由 BEGIN TRANSACTION 和 END TRANSACTION 包裹 1,500,000 个 UPSERTS,测试 #1 需要 10 小时才能完成。
每 100000 个 UPSERTS 由 BEGIN TRANSACTION 和 END TRANSACTION 包裹 1,500,000 个 UPSERTS,测试 #2 需要 18 分钟才能完成。
请问性能 SQLITE UPSERT
大幅UNIQUE ON CONFLICT IGNORE
提升的原因是什么?