图片数据库已经6g了, 添加新图时总是出现查询超时的情况, 有办法解决么?高分求教
图到不多有几万张图,每张最大200k。每次添加图片时需要从临时图片数据库 转移到主数据库 每次最多3张,这个过程总是出现查询超时的情况,请问有什么办法解决么?小弟先谢谢各位前辈了
源代码如下:
sql = "select * from TempImageTable where user_id= " & user_id
set rootRs = conn.execute(sql)
do while not rootRs.Bof and not rootRs.Eof
set nextRs = Server.CreateObject( "ADODB.recordSet ")
sql = "SELECT * FROM ImageTable "
nextRs.open sql,conn ,1,3
nextRs.AddNew
nextRs( "file_type ") = rootRs( "file_type ")
nextRs( "file_size ") = rootRs( "file_size ")
nextRs( "file_content ").AppendChunk rootRs( "file_content ").GetChunk(clng(rootRs( "file_size ")))
nextRs( "link_id ") = article_id
nextRs( "create_time ") = this_time
nextRs.Update
rootRs.MoveNext
loop
conn.execute "delete from TempImageTable where user_id= " & user_id
------解决方案--------------------把图片保存在你的硬盘上,在数据库里就保存图片的地址,不就可以了?
------解决方案--------------------这样试试
set nextRs = Server.CreateObject( "ADODB.recordSet ")
sql = "SELECT * FROM ImageTable "
nextRs.open sql,conn ,1,3
sql = "select * from TempImageTable where user_id= " & user_id
set rootRs = conn.execute(sql)
do while not rootRs.Bof and not rootRs.Eof
nextRs.AddNew
nextRs( "file_type ") = rootRs( "file_type ")
nextRs( "file_size ") = rootRs( "file_size ")
nextRs( "file_content ").AppendChunk
rootRs( "file_content ").GetChunk(clng(rootRs( "file_size ")))
nextRs( "link_id ") = article_id
nextRs( "create_time ") = this_time
nextRs.Update
rootRs.MoveNext
loop
conn.execute "delete from TempImageTable where user_id= " & user_id
------解决方案--------------------select * into ImageTable from TempImageTable where user_id= " & user_id
我的看法:
user_id上有索引吗?
还有set nextRs = Server.CreateObject( "ADODB.recordSet ")这句是不是可以放在while外面?当然如果用了select into就没必要再开这个循环了。
另外看一下服务器的性能,是不是CPU利用率过高了?太高的话可能会导致响应慢而超时。
------解决方案--------------------你的sql是常量,却在循环中打开数据库,不超时才怪。
------解决方案--------------------sql = "SELECT * FROM ImageTable "
改成
sql = "SELECT * FROM ImageTable where 1=0 "
------解决方案--------------------试试sql中的UPDATETEXT函数
------解决方案--------------------将图片写进数据库,是一条死路.把图片重新整理出来,保存路径吧
------解决方案--------------------大哥,你每次都打开整个数据库,你的程序不死谁死?
你试试
set nextRs = Server.CreateObject( "ADODB.recordSet ")
sql = "SELECT * FROM ImageTable where 1=0 "
nextRs.open sql,conn ,1,3
sql = "select * from TempImageTable where user_id= " & user_id
set rootRs = conn.execute(sql)