0
这是我的选择查询。Oracle选择查询花费很长时间
select count(m.uniq_no) cnt
from web_cst_mst m
inner join WEB_CST_INV i on M.UNIQ_NO=I.UNIQ_NO
where I.INV_NO='inv01'
and I.INV_DT=to_date('2015-01-12','YYYY-MM-DD')
and M.sel_tin='19320703277'
;
我已经创建了一个(uniq_no,sel_tin)
指数web_cst_mst
表和(uniq_no,inv_no,inv_dt)
为web_cst_inv
表的索引。
该查询需要大约250ms才能执行。之前它曾经需要500毫秒,当我有修剪功能卖方tin(trim(M.sel_tin))
。我删除了修剪,它是原来的时间的一半,所以我想如果我可以删除to_date功能,那么它可能需要较少的时间,但我在这里面临的问题是我发送日期字符串格式,因为我不能发送c#
日期变量在(10-JAN-14)
这种格式中,因为c#
日期变量也保持时间。我试过下面的代码只是为了发送日期部分,以便我可以删除oracle中的to_date函数,但它不工作。并且oracle中的日期以(dd-MMM-yy ex:10-JAN-14)
格式存储。所以无论我只需要发送日期部分还是必须在查询中有to_date函数。
我想只发送日期时间变量的日期部分以提高此查询的性能。但我无法做到这一点。
任何建议/有助于提高性能。谢谢。
DateTime inv_date = DateTime.ParseExact(inv_dt, "dd-MMM-yy", CultureInfo.InvariantCulture).Date;
*您应该*使用参数化查询和传递的字符串而不是实际的日期时间值,以避免转换错误。例如,你提到的格式('10-JAN-14')保证失败*并*引入Y2K错误。尽管如此,这*不会对性能有所帮助。 'to_date'应用于可用于搜索索引的单个字符串。另一方面,'Trim'必须应用于* all *行,以防止使用索引。 –
你看过sql执行计划吗? –