gpt4 book ai didi

sqlite - SQLite查询中的操作顺序

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

我有以下形式的查询:

SELECT akey, avalue, expensiveop(akey) FROM atable WHERE avalue < SOME_CONSTANT;


似乎对表中的所有行都调用了costopop()(这是一个用户定义的函数,需要花费大量时间才能执行)。出于性能原因,我只希望它对结果集中的每一行执行一次。

我尝试了以下方法,但似乎没有什么不同:

SELECT akey, avalue, expensiveop(akey) FROM (SELECT * FROM atable WHERE avalue < SOME_CONSTANT) 


有任何想法吗?

最佳答案

您可以在此页面上阅读有关SQLite优化器的信息,尤其是Subquery展平部分:
http://www.sqlite.org/optoverview.html#flattening

它包含19个条件的列表,必须满足所有条件才能使子查询变平。选择一个,然后做与它相反的操作,例如,一些随机示例(未经测试):

 SELECT akey, avalue, expensiveop(akey)
FROM (SELECT * FROM atable WHERE avalue < SOME_CONSTANT LIMIT 99999999)
LIMIT 99999999

SELECT akey, avalue, expensiveop(akey) FROM
(SELECT * FROM atable WHERE avalue < SOME_CONSTANT
UNION
SELECT * FROM atable WHERE 0 GROUP BY avalue)

SELECT akey, avalue, expensiveop(akey) FROM
(SELECT * FROM atable WHERE avalue < SOME_CONSTANT LIMIT -1 OFFSET 0)

关于sqlite - SQLite查询中的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221465/

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