有关于提高数据库存取效率的问题。高手请指教,新手请欣赏!
我需要在一个项目中对SQLserver数据库进行大量的读写操作。
例如:要随即生成10000个号码插入数据库,我用以下代码实现,但是效率超低,耗时超长!!!
后来加入了临时表(如下:)但也没有提高效率,不知道错在哪里,请高手指教!!!!分不够再加!急!
问题点数:100、回复次数:7Top
1 楼hdhai9451(☆新人类☆)回复于 2005-07-04 20:30:16 得分 10
用下面的方法生成是最快的
select top 10000 id=identity(int,1,1),item='OK',num=null
into #tt
from syscolumns a ,sysobjects
#tt是臨時表
select * from #tt
Top
2 楼zlt982001(乐天)回复于 2005-07-04 23:00:57 得分 10
你原来的代码没贴,怎么看
一般如果直接用 Insert 语句 插入慢的化,与索引太多或数据字段太多有关系
与临时表没有太大关系Top
3 楼haipingma(今天你过得快乐吗?)回复于 2005-07-05 09:05:39 得分 0
用insert into 10000條數據應該不會慢
你貼出來看看Top
4 楼fhvsbgmy(地球火星人)回复于 2005-07-05 10:38:23 得分 0
不好意思。。。。。忘记贴代码了
……
count=10000
weishu = 15
‘con 是当前连接的sql活动连接
con.execute “select * into #table1 from table2” ‘table2 是我最终要的实际表
rundomize
do while count>0
x=(#9000000000 * rnd +#1000000000 * rnd)$ & (#9000000000 * rnd + #1000000000 * rnd )$
x=left(x,0,weishu)
set rs=con.execute “select * from #table1 where key=’” & x & “’”
if rs.eof then
con.execute “insert into #table1(key,dates) values(‘” & x &”’,’” & datetime.now & “’)”
count=count-1
end if
loop
con.execute “drop index table2.ikey”
con.execute “insert into table2 select * from #table1”
con.execute “creat index ikey on table2(key)”
……
‘ 大概就是这个样子,代码在家里,来公司没带。主要就是这个结构,至于妹一句的语法可能不太对,但是保证原来的代码运行没有问题。小弟是刚刚开始做数据库的这个部分。。。。什么都不太熟悉。。。。请大家多多帮助!!!!!
Top
5 楼haipingma(今天你过得快乐吗?)回复于 2005-07-05 13:56:01 得分 0
你用循環插入怎麼能快,要用批次插入啊
Top
6 楼fhvsbgmy(地球火星人)回复于 2005-07-05 15:03:23 得分 0
怎么批次插入啊!。。。。。。。。。Top
7 楼zlt982001(乐天)回复于 2005-07-05 22:02:16 得分 80
很以用以下方式
方法1:
使用事务
cn.BeginTrans '开头
cn.CommitTrans '成功结束
cn.RollbackTrans '错误回滚
事务的好处是有错误处理,不会插入一半出错,另外也可以提高一点速度,因为是批量提交的
结合优化下面优化的语句,可以提高一些速度
1.避免使用Double(#)数据类型,可以使用Long ,来生成随机数
2.set rs=con.execute “select * from #table1 where key=’” & x & “’”
改为 : if con.execute(“select Count(*) from #table1 where key=’” & x & “’”)(0)>0
3.插入语句:
con.execute “insert into #table1(key,dates) values(‘” & x &”’,’” & datetime.now & “’)”
加上参数
con.execute “insert into #table1(key,dates) values(‘” & x &”’,’” & datetime.now & “’)”, , adExecuteNoRecords
方法2: 利用存储过程
应该是提速最高的方法 ,你上面的语句完全可以写在存储过程中
Top




