为什么我的sqlite"更新集"花费了太多时间



我有两个名为productimage的表,如下所示:

CREATE TABLE "product" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"Image" TEXT
);
CREATE TABLE "image" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"IsCover" INTEGER,
"Url" TEXT,
"Product" INTEGER,
FOREIGN KEY ("Product") REFERENCES "product" ("Id")
);

product表包含大约350000行,image表包含超过500000行。

我想将与我的产品对应的图像传输到product.Image,所以我使用了这行代码,但它需要很长时间才能运行。

update product
set image = (select Url from image
where IsCover = 1 and
Product = product.Id
limit 1);

有没有更快的方法来实现这一点?为什么这么慢?

我首先要评论的是,在没有ORDER BY子句的情况下使用LIMIT 1通常没有多大意义。很明显,在某些情况下,子查询会返回多行。但是,最好的方法是使用其他逻辑修复子查询,以确保只找到一个匹配项。

也就是说,为了加快相关子查询的速度,您可以尝试以下两个索引建议之一:

CREATE INDEX idx1 ON image (Product, IsCover, Url);
or
CREATE INDEX idx2 ON image (IsCover, Product, Url);

由于子查询中的查找应该是迄今为止最大的性能瓶颈,因此添加正确的索引可能会带来很大的不同。

相关内容

  • 没有找到相关文章

最新更新