【发布时间】:2013-03-25 15:03:59
【问题描述】:
注意:我目前正在一个 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
只运行一次(并缓存其结果以供进一步访问)?
在这个例子中没什么大不了的,因为它是一个只执行两次的简单查询,但是我需要它运行 在我的实际程序中(它抓取所有子记录(表 1) 关联到由外键绑定的父记录 (table2)。它还检查一个 id 映射表以确保它查询 对于本地生成的 id 以及真实/更新/新密钥)。
非常感谢您对此提供的任何帮助,谢谢。
【问题讨论】:
标签: sql sqlite query-optimization