注意:我目前正在一个 sqlite3 数据库上运行我的查询,尽管来自任何其他 DBMS 专业知识的答案将是受欢迎的见解......
我想知道查询优化器是否尝试识别重复的查询/子查询,如果是,则只运行一次。
这是我的示例查询:
SELECT *
FROM table1 AS t1
WHERE t1.fk_id =
(
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
)
OR t1.fk_id =
(
SELECT local_id
FROM ID_MAP
WHERE remote_id =
(
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
)
);
将嵌套查询
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
只运行一次(并将其结果缓存以供进一步访问)?
在这个例子中没什么大不了的,因为它是一个只执行两次的简单查询,但是我需要它在我的实际程序中再运行大约 4-5 次(x2,每个子记录两次,所以真的是 8-10) (它抓取与父记录(table2)关联的所有子记录(table1),由外键绑定。它还检查id映射表以确保它查询本地生成的id以及真实/更新的id /新密钥)。
我真的很感激任何帮助,谢谢。