我想知道:SQLite中自动查询优化的状态是什么? 我对这个老问题感到特别震惊(我偶然发现了这个问题,搜索其他内容):
SQLite table aliases effecting the performance of queries
正如您所读到的,据说该查询产生了一个笛卡尔积。如果根本不存在查询规划器或优化,那肯定是正确的。 但在我看来,这个案例应该触发自动优化,至少序列化ANDs子句,如果没有别的(作为对这些问题的回复建议手动完成)。
我的,可能过于乐观,理解是数据库查询优化技术与编译器优化技术相差不多(=自动执行大多数更明显的优化工作)。
但事情的真实状态是什么?
问题不仅仅是为了满足好奇心,而是因为我有一个与SQLite DB交互的C ++程序,并且有很多查询与该问题中显示的查询没那么不同,如果现在我会感到非常震惊我发现我需要手动进行简单的优化。
感谢。
编辑:要回复以下关于a_horse_with_no_name注释的更多信息,这是我自己的程序中的查询示例:
SELECT * FROM forum_topic Topic, user AutoreTopic, forum_post LastPost, user AutoreLastPost
WHERE (Topic.ForumTopic__subforum_C9_id = 1) AND
(Topic.ForumTopic__author_C0_id = AutoreTopic.C0_id) AND
((LastPost.ForumPost__topic_last_post_C15_id = Topic.C15_id) AND
(LastPost.ForumPost__author_C0_id = AutoreLastPost.C0_id)) ORDER BY
LastPost.C16_id DESC LIMIT 4 OFFSET 0;
现在,这是否会生成所有4个表的笛卡尔积,然后是条件评估,或者查询规划器将序列化4个AND子句,然后再做笛卡尔积(使用创建的子集) ,这应该可能更有效率?)