我们正在使用Oracle 11,最近我获得了Dell SQL Optimizer(包含在Xpert Toad软件包中)。今天早上我们有一条语句运行时间比平常长,最终在缺少创建时的某些条件的情况下才运行成功。由于我以前从未使用过任何SQL优化器,因此我很好奇它会对语句进行什么更改。结果返回了150多个相同语句的变体,但成本最低的那个只是在以下行添加了内容。
AND o.curdate > 0 + UID * 0
我们已经有o.curdate > 0,然后添加了“+ UID * 0”。这将运行时间从一分钟减少到3秒。我认为这与Oracle如何翻译和处理条件有关,但我很好奇是否有任何Oracle高手能够提供关于如何通过增加大于零检查来降低运行时间15倍的见解。谢谢!
curdate
索引,这可能是次优的。更新统计信息可能会产生相同的效果。 - Gordon Linoff