PostgreSQL删除更新优化

1. 先说删除吧,因为刚搞了。

删除缓慢的原因:主要是约束的问题。(数据库在有约束的时候,进行操作,会根据约束对相关表进行验证,可想而知,20W的数据验证要耗费多久的时间)。其次就是sql的编写。(sql如果查询中包含子查询等的可以优化的where会影响匹配的速度<查询的话就不多逼逼了>)。索引的问题(https://blog.csdn.net/steven088/article/details/7174566)

具体解决方法:

ALTER TABLE tableName DISABLE TRIGGER ALL;

        delete 目标语句

ALTER TABLE tableName ENABLE TRIGGER ALL;

2. 更新,原因和删除大体一致,这里主要描述一下自己遇到的问题。

利用mybatis批量更新,第一张图是原本的批量更新的写法,发现在本地还可以的但是放在服务器会由于时间太久出现IO错误。

后来换成第二张图的方式来更新。当然也可以java代码for循环来单条更新来达到批量的目的。(对于这三种方式,第二种最快)


		UPDATE lt_dzheinfo 
		 
            
                
                     when dzid=#{reader.readerId} then #{reader.readerBarcode}
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.readerName}
                
            
             
                
                     when dzid=#{reader.readerId} then #{reader.readerState}
                
            
             
                
                     when dzid=#{reader.readerId} then #{reader.readerPsw}
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.readerType}
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.identityType}
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.identityId}
                
            
            
                
                     when dzid=#{reader.readerId} then TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS')
                
            
            
                
                     when dzid=#{reader.readerId} then TO_TIMESTAMP(#{reader.disableDate}, 'YYYY-MM-DD HH24:MI:SS')
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.readerOfLibCode}
                
            
            
                
                	when dzid=#{reader.readerId} then 
		            
						
							true
						
						
							false
						
					
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.readerOperatorId}
                
            
            
                
                     when dzid=#{reader.readerId} then #{reader.readerRemark}
                
            
            
                
                     when dzid=#{reader.readerId} then TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS')
                
            
            
                
                     when dzid=#{reader.readerId} then TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS')
                
            
        
        where dzid in
        
            #{reader.readerId}
        
	

		
			UPDATE lt_dzheinfo SET
			dzzhao = #{reader.readerBarcode},
			xming = #{reader.readerName},
			ztai = #{reader.readerState},
			mima = #{reader.readerPsw},
			dzlxid = #{reader.readerType},
			zjlx = #{reader.identityType},
			zjhma = #{reader.identityId},
			qyrqi = TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS'),
			jzrqi = TO_TIMESTAMP(#{reader.disableDate}, 'YYYY-MM-DD HH24:MI:SS'),
			libid = #{reader.readerOfLibCode},
			xingbie = 
			
				
					true
				
				
					false
				
			,
			userid = #{reader.readerOperatorId},
			beizhu = #{reader.readerRemark},
			bzrqi = TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS'),
			optime = TO_TIMESTAMP(#{reader.enableDate}, 'YYYY-MM-DD HH24:MI:SS')
			
				dzid = #{reader.readerId}
			
		
	

 

你可能感兴趣的:(postgre)