2014-02-17 34 views
0

我有一个针对6个Oracle表的查询,所有内部连接。
当我运行条件
WHERE tablex.MsgId > 13298690,答案是立竿见影。
当我运行条件
WHERE tablex.MsgId > Dlookup("ParamLong","tblParamSave","ParamName='SomeName'"),它需要1分钟。
当然,Dlookup返回13298690,所以两个查询在功能上都是相同的。在查询条件中查找Dlookup:slow

+1

我的猜测是,它正在评估第二种情况下每一行的函数,而在第一种情况下,它只是进行索引查找。 – user2989408

+0

可能的解决方案,评估函数并将结果保存到变量中,然后使用该变量进行比较。 – user2989408

+0

我不建议在查询中使用VBA函数。如果使用ADO或SQL Pass Through Queries,会出现像这样的性能问题。 – HK1

回答

1

奇怪和有趣的是,“强类型”的标准表达式:

WHERE tablex.MsgId > CLng(Dlookup(...)) 

恢复查询的全速。