Database 添加条件会使查询速度变慢
亲爱的国家,Database 添加条件会使查询速度变慢,database,oracle,performance,Database,Oracle,Performance,亲爱的国家, 此帖子与查询的性能相关。 我执行一个简单的查询,如下所示 从workorder中选择wonum、siteid,其中workorder.siteid='MCT'和istask=0 并解码(workorder.pmnum,null,workorder.reportdate,workorder.targetStartDate)>='18年3月12日' 解码(workorder.pmnum,null,workorder.reportdate,workorder.targetStartDat
此帖子与查询的性能相关。
我执行一个简单的查询,如下所示 从workorder中选择wonum、siteid,其中workorder.siteid='MCT'和istask=0 并解码(workorder.pmnum,null,workorder.reportdate,workorder.targetStartDate)>='18年3月12日' 解码(workorder.pmnum,null,workorder.reportdate,workorder.targetStartDate)='18年3月12日'
解码(workorder.pmnum,null,workorder.reportdate,workorder.targetstartdate)一般来说,在
where
子句中涉及的列上创建索引。正如您所描述的,为类型
列编制索引可能会有所帮助
这真的有用吗?谁知道。。。检查并解释计划。收集表的统计信息,以便优化器知道要做什么(即选择最佳执行计划)。然后你就可以知道该怎么做了
此外,您似乎正在强制Oracle执行隐式转换。说
some_date >= '12-mar-18'
这意味着-如果某个日期列的数据类型是日期(看起来是这样的,否则会得到错误的结果)-Oracle必须通过应用正确的格式掩码(例如,dd-mon-yy
)将字符串转换为有效的日期(例如,dd-mon-yy
)。你为什么要这么做?提供date
value yourself
some_date >= date '2018-03-12'
或
但是要小心<代码>三月表示“三月”。在我说克罗地亚语的数据库中,这个查询肯定会失败,我们这里没有任何mar
月份(它是ožu
)。也许你更喜欢这里的数字,即12-03-18
。还有一点需要注意:这个值很难理解;什么是12
?现在是一个月的第12天,还是十二月?这同样适用于03
。因此,始终使用不会引起混淆的值,方法是提供日期文字(始终采用yyyy-mm-dd
格式-我首先建议的格式),或者使用带有适当格式掩码的to_date
函数
some_date >= to_date('12-mar-18', 'dd-mon-yy')