主键为两列时SQLite DELETE速度慢

wlp8pajw  于 2023-01-05  发布在  SQLite
关注(0)|答案(1)|浏览(211)

我有一个SQLite表格,定义如下:

CREATE TABLE mytable (
  colA INTEGER NOT NULL,
  colB INTEGER NOT NULL,
  colC INTEGER,
  PRIMARY KEY (colA, colB));

我在大型事务中执行的内部循环操作之一是:

DELETE FROM mytable
  WHERE (colA = ?) & (colB = ?);

这个操作似乎是我的应用程序的瓶颈,当我运行strace查看应用程序在做什么时,我看到它对数据库文件进行了一系列连续的1024-KiB pread64调用,这表明删除可能实际上需要对表进行线性扫描,而不是简单的索引查找。
我假设主键上有一个索引,但也许我做错了什么,我的问题是是否有一种方法可以加速这些删除操作。

qojgxg4l

qojgxg4l1#

运算符&bitwise AND,而不是boolean AND运算符。
如果使用boolean AND运算符,则主键将用于加快执行速度:

DELETE FROM mytable
  WHERE (colA = ?) AND (colB = ?);

请参见demo及其执行计划。

相关问题