首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

图片数据库已经6g了, 添加新图时总是出现查询超时的情况, 有办法解决么

2012-02-27 
图片数据库已经6g了, 添加新图时总是出现查询超时的情况, 有办法解决么?高分求教图到不多有几万张图,每张

图片数据库已经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)


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

不知道你是什么需求……为什么一定要将一个表里的image搞到另外一个去,保留temp里面的,用id互相关联不一样可以拿出temp里面的数据用吗?
[解决办法]
……可能是因为“=”是中文打的吧

反正你如果只是为了增加的话就取一个recordcount为0的数据集

image放到数据库也没什么不好……不过放image的那张表最好只有两个字段,一个是id一个是image。

[解决办法]
把数据库的图片读取到image控件中,后再保存到硬盘上..只能这样了..
[解决办法]
一般的论坛或者是资料人事部分部门的数据库不会把图片保存到数据库中
因为图片保存到数据库中后
会对网络,数据库服务器造成很大的压力
而是把图片保存到硬盘中
然后数据库中保存图片的相对地址或者URL
这样系统才快
[解决办法]
sql = "SELECT * FROM ImageTable "
改成
sql = "SELECT * FROM ImageTable where 1=0 "

热点排行