以下是我的查询的简化版本:
SELECT myfunc(u.id) score FROM users u
ORDER BY score
LIMIT 20
如您所见,我在score
子句中使用了myfunc()
(这是ORDER BY
函数的结果)。现在我想知道,当我在ORDER BY
子句中使用它时,是否会调用该函数?如果是,那我怎么能避免呢?因为这个功能需要大量的处理和召回两次就像是一场噩梦。
答案 0 :(得分:0)
可能不是,因为在订购完成之前已经准备好了数据。如果你还有疑问,可以通过让你的函数在运行之间做一些可见的事情来测试它(在表中增加一个值)
你可能会发现,它可以运行一百万次,每100万行一次,然后才能应用限制20 ..
如果你的函数非常慢,并且在插入时存储结果而不是每次运行查询时计算它都是明智的,那就