回复 2# liaosnet 使用nmon工具监控到CPU使用率高的。把代码中这个SQL语句的执行注释掉去压力跑的时候,数据库的CPU平均使用10左右。所以断定,是这个SQL的查询导致数据库CPU使用率高。同时在代码中加了打印当前系统时间的函数——gettimeofday来确定应用程序中这段SQL跑了...
显示全部回复 2# liaosnet 使用nmon工具监控到CPU使用率高的。把代码中这个SQL语句的执行注释掉去压力跑的时候,数据库的CPU平均使用10左右。所以断定,是这个SQL的查询导致数据库CPU使用率高。同时在代码中加了打印当前系统时间的函数——gettimeofday来确定应用程序中这段SQL跑了多久。之所以想要优化这段SQL,是因为应用程序中另一个地方,有一个SQL是五张表关联,每张表的数据量都比这张表多,处理时间才十几ms,同时也是因为太耗CPU了,怕后面生产环境压力增大引起生产数据库报警。
另外,对于informix的执行计划,我理解的是先使用索引,按照落在索引上的查询条件找到一些记录,然后在这些记录中再通过filter中的条件去筛选。从查询计划的结果看,rows_scan为0,即先使用索引去查找的时候,是没有记录的(事实也的确如此,数据库中并没有zrrq = '20150414'的记录),也就是即使有count,sum,or,in,但是这些条件没有数据对象来供它处理,那也应该马上返回吧。对于执行计划,我是一知半解,如果有理解错误的地方,麻烦帮忙指出。
还有,感谢您的回复!
收起