各位好!       目前项目里有个地方性能始终上不去 想问一下有没有好的方案 在此先谢谢啦!       问题描述:表A 基础信息表  数据量1W 其中ID=1000的数据条数约300条
                 ID  NUM
                 1000  1
                 1000  2
                  ..   3
                 1005  19
                  ..   ..                 表B 实时上报数据表 数据量1W                 函数arithmetic()---此函数传进参数,然后根据传进的参数进行判断 得结果返回,其中需要查询表B 3次       select    arithmetic(num)      from A where id = '1000'         目前这个SQL 执行完 结果 需要10秒+   想问一下 有什么好的优化方案么       有朋友说是因为实时上报数据表 每次进行上报数据插入时都重新编译所以造成我查询时 需要等待编译所以造成的,如果是 怎么解决这种情况
       

解决方案 »

  1.   

    你好 表B 的结构 如下:数据量1000条
         NUM_ID   ONOFF
          1      121111110111
          2      121101110121
          3      121112120111
    类型都是字符串 只有主健 没有索引 不过这个表 每30秒都要更新300条数据 (目前)表A:
    ID NUM
      1000 1
      1000 2
      .. 3
      1005 19
      .. ..也都是字符串 没索引 有主健
      

  2.   

    可以验证一下,是否如那位朋友所说,因实时更新数据,导致重新编译器 = 增加了执行时间。将 表A 复制一份 A_BAK,避开 实时更新,查询 A_BAK,执行时间是否会缩减?
      

  3.   

    才1W条数据,而且还有主键,数据量也不是很大,个人觉得这个10秒不是SQL的执行时间,楼主可以将该表复制到一个非实时更新的表中进行测试。
    如果在测试表中执行效率很快,就说明这个10秒是出在实时更新的事务控制上,建议在事务控制上想办法。
      

  4.   

    才1W条数据,而且还有主键,数据量也不是很大,个人觉得这个10秒不是SQL的执行时间,楼主可以将该表复制到一个非实时更新的表中进行测试。
    如果在测试表中执行效率很快,就说明这个10秒是出在实时更新的事务控制上,建议在事务控制上想办法
    如您所说 我测试过 在非实时更新的表中 查询 不到 0.3秒 
      

  5.   

    更改你的函数,不要在函数内部使用update,delete等语句,只使用select语句即可。
      

  6.   

    我函数里面只有SELECT操作 
      

  7.   

    plz show the code of your function
      

  8.   


    select语句是和事务无关的。
      

  9.   

    创建索引,注意要是函数索引,CREATE INDEX index_name ON A(arithmetic(num));
      

  10.   

    函数索引,CREATE INDEX index_name ON A(arithmetic(num));
    select arithmetic(num) from A where id = :id