各位大侠,本人菜鸟。
最近用crystal report做了一个报表,但是运行速度奇慢。研究了下,是因为里面的某个条件的缘故:
WHERE FIX_DATE=to_date('2013/02/14','yyyy/mm/dd')如果换成比如说Trade_Date=xxxx就很快。FIX_DATE这个字段有很多null值,不知道是不是这个缘故导致搜索很慢,如何解决呢?

解决方案 »

  1.   

    to_date是你自己写的函数?to_date('2013/02/14','yyyy/mm/dd')应该是把字符串转换成日期吧?
    对于每一行数据都回执行这个函数,所以慢了。你在前面直接定义一个日期变量好了。
      

  2.   


    大侠,但是我如果改成trade_date=to_date()这样还是很快的呃,所以我怀疑跟fix_date这个字段有关系。先定义一个日期变量的话怎么搞呢?crystal report里面本来就是先设一个parameter,比如说叫做date,然后selection formula里面直接写一下fix_date={?date}这样的呃
      

  3.   

    我的习惯是调用存储过程,所有数据处理尽量在数据库上做。
    你这个我倒是真不清楚了。你检查过FIX_DATE和trade_date了类型都相同么?
      

  4.   

    1、to_date函数,做数据类型转化肯定会损失性能
    2、FIX_DATE的数据类型是否和to_date()的返回结果一致
    3、FIX_DATE是否有索引
      

  5.   

    to_date好像是Oracle的函数吧?要不你试试这样写法?
    WHERE FIX_DATE in (select to_date('2013/02/14','yyyy/mm/dd') from xxx)
      

  6.   

    看下执行计划,一般来说,对索引列使用了函数的话,就不能够进行索引查找了(在将每个数据进行函数计算之前,不知道函数的值,无法进行数据过滤),是非SARG查询,建议等效转换成可SARG查询的形式(去掉函数)