我有一个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
调用,这表明删除可能实际上需要对表进行线性扫描,而不是简单的索引查找。
我假设主键上有一个索引,但也许我做错了什么,我的问题是是否有一种方法可以加速这些删除操作。
1条答案
按热度按时间qojgxg4l1#
运算符
&
是bitwise AND
,而不是boolean AND
运算符。如果使用
boolean AND
运算符,则主键将用于加快执行速度:请参见demo及其执行计划。