2

这是两个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 表中有一个索引,第一个使用 an 的查询不OR应该只慢一点吗?

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

对于第一个查询,我希望内部计划看起来像这样:

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

1 回答 1

0

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

于 2012-10-20T07:50:20.710 回答