gpt4 book ai didi

sqlite - 是什么导致带有OR子句的sqlite连接约束显着变慢?

转载 作者:行者123 更新时间:2023-12-03 18:18:07 25 4
gpt4 key购买 nike

这是两个sqlite查询:

SELECT * FROM items JOIN licenses ON items.id=licenses.id OR items.type=licenses.type;


此查询不使用 OR,而是使用 UNION

SELECT * FROM items JOIN licenses ON items.id=licenses.id UNION SELECT * FROM items JOIN licenses ON items.type=licenses.type;


假设我在id的licenses表中有一个索引,而在type的licenses表中有一个索引,使用第一个使用 OR的查询不应该慢一点吗?

我看到第一个查询比Sqlite中的第二个查询慢大约20倍,这是什么原因造成的?

我希望内部计划在第一个查询中看起来像这样:


对于 items表中的每一行:
id表的 items列中获取值,并将其用于查找具有该 licensesid表中的所有行,并将该行匹配的行称为A。
type表的 items列中获取值,并使用该值查找具有该 licensestype表中的所有行,并将该行匹配的行称为A'。
合并A和A',并消除任何重复的行。将结果添加到结果行列表中

最佳答案

对于进行联接,SQLite仅在两个表上支持嵌套循环联接(可以使用索引对其进行优化)。
The SQLite Query PlannerQuery Planning中所述,一次对两个表进行联接不是受支持的优化之一。

关于sqlite - 是什么导致带有OR子句的sqlite连接约束显着变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com