gpt4 book ai didi

caching - 内部联接优化

转载 作者:行者123 更新时间:2023-12-03 17:45:54 25 4
gpt4 key购买 nike

我有两个表要加入。 TABLE_A(包含列“ a”)和TABLE_BC(包含列“ b”和“ c”)。
TABLE_BC有条件。这两个表通过“ rowid”连接。

就像是:

SELECT a, b, c FROM main.TABLE_A INNER JOIN main.TABLE_BC WHERE (b > 10.0 AND c < 10.0) ON main.TABLE_A.rowid = main.TABLE_BC.rowid ORDER BY a;


或者:

SELECT a, b, c FROM main.TABLE_A AS s1 INNER JOIN (SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0)) AS s2 ON s1.rowid = s2.rowid ORDER BY a;


我需要使用不同的TABLE_A进行几次操作,但是TABLE_BC不会改变...因此,我可以通过为查询的恒定部分创建一个临时的内存数据库(mem)来加快处理速度。

CREATE TABLE mem.cache AS SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0);


其次(很多)

SELECT a, b, c FROM main.TABLE_A INNER JOIN mem.cache ON main.TABLE_A.rowid = mem.cache.rowid ORDER BY a;


我从上面的所有查询中都得到了相同的结果集,但是最后一个选择是最快的。

问题是我想避免将查询分为两部分。我希望SQLite能够自动为我做同样的事情(至少在第二种情况下),但是似乎没有发生……为什么?

谢谢。

最佳答案

SQLite非常擅长优化。一般经验法则:SmallTable Inner Join BigTable比反向速度快。

话虽这么说,我想知道您的第一个查询是否会以以下形式运行得更快:

SELECT a, b, c 
FROM main.TABLE_A
INNER JOIN main.TABLE_BC ON main.TABLE_A.rowid = main.TABLE_BC.rowid
WHERE (b > 10.0 AND c < 10.0)
ORDER BY a;

关于caching - 内部联接优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com