优化也就是那几个方向,,,
1、优化索引
2、优化表
3、优化语句,,,
就你的实际情况来说,
1、首先,看需不需要给你的几个关联字段加上索引
2、你的left join 实际情况中,能不能用inner join,因为inner join的查询范围比left join要小
3、最后一个<>0,看能不能替换成= or的情况
DB2 本身就是这样的,实例启动后,数据库并不会启动的,默认是在第一个应用程序连接数据的时候启动数据库的(激活),在实例级分配一些内存,但是并没有影响到数据库这个级别,db2会在第一次连接的时候,按照数据库的配置参数(get db cfg for dbname)对数据库进行初始化,比如分配dbheap,util_heap_sz,locklist,logbufsz等等,这些内存的分配需要大量的时间,等到以后连接的时候,这些 *** 作不必再作,当然就快。第一次启动的这个时候是比较长时间的。还有默认在最后一个应用程序断开连接的时候数据库会自动关闭(去激活)。
你可以采用命令
ACTIVATE DATABASE
启动数据库(激活),不过这样必须用命令
DEACTIVATE DATABASE
才能关闭数据库的(去激活)
你这样写很不好,看起来写的是一句sql,反而速度慢下来了。首先row_number() over() as rownum毫无必要,这样来分页效率不高。然后能不用*就不用*查询。在大数据量和列很多的情况下,会慢很多。而且你也说了,更新1W条数据需要半个小时。那么可以采用存储过程或者程序来访问。这样会快很多,推荐采用存储过程,110W条数据,就算重建索引等,更新一条应该在200ms一下,一万条,不会那么久的。希望能帮助得到你。
你这样写sql语句,执行时间太久了,会造成假死现象,这样很不好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)