【发布时间】:2021-02-22 09:04:00
【问题描述】:
我有以下查询要执行:
UPDATE scenario_group
SET
project_id = @projectId
WHERE
scenario_group_id = @scenarioGroupId
AND @projectId IN (SELECT project_id FROM project);";
在我看来,它会评估每个匹配行的 @projectId IN (SELECT project_id FROM PROJECT)。那会很糟糕。另一方面,如果优化器很聪明,它会看到项目表永远不会改变,因此只检查一次。
这是解释。看起来它会做很多事情。但我不确定如何解释它。
id parent notused detail
3 0 0 SEARCH TABLE scenario_group USING INTEGER PRIMARY KEY (rowid=?)
8 0 0 USING ROWID SEARCH ON TABLE project FOR IN-OPERATOR
我需要重写此更新吗?如果是这样,我将如何编写此 UPDATE 以提前明确检查 project_id 的存在?
【问题讨论】:
标签: sql sqlite query-optimization