我开发了一大段编码,以便从我们的数据库中获取订单信息。这在以前一直运行良好,在不到一秒的时间内捕获了1000行数据。
然而,最近规范已经改变。我们已经从周一到周一搬到了从周六到周五运行订单的意图。
这意味着重写代码,包括case语句,下面是一个例子:
*(Previous)*
,Case When To_Char(obd.due_date, 'YYYYIW') = To_Char(sysdate, 'YYYYIW') Then 'Current Week'
*(Now)*
,Case When TO_DATE(obd.due_date, 'DD-MM-YYYY') BETWEEN (TO_DATE(TO_CHAR(TRUNC(TO_DATE(SYSDATE,'DD-MM-YYYY'), 'WW')-2,'DD-MON-YYYY'))) AND (TO_DATE(TO_CHAR(TRUNC(TO_DATE(SYSDATE,'DD-MM-YYYY'), 'WW')+5,'DD-MON-YYYY'))) Then 'Current Week'
但是,由于转换,我现在丢失了字段索引,因此访问数据的时间大大增加。
非常感谢任何帮助。
答案 0 :(得分:1)
我怀疑你的“之前”计算是否使用了一个索引(它在CASE中使用,而不是在WHERE中使用)。
您应该始终尝试获取可搜索的参数,即仅在比较的一侧进行计算:
WHEN obd.due_date >= next_day(trunc(current_date) , 'sat')-7
AND obd.due_date < next_day(trunc(current_date) , 'sat')
应该是你想要的