亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比

set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比

熱門標簽:遼寧銀行智能外呼系統 海南銀行智能外呼系統商家 電銷機器人違法了嗎 遼寧正規電銷機器人 辰溪地圖標注 姜堰電銷機器人 許昌智能電銷機器人公司 澳大利亞城市地圖標注 上海浦東騰訊地圖標注位置

經常用asp的同行,可能會建議用set rs=conn.execute(sql)來代替set rs=server.createobject(“ADODB.recordset”):rs.open conn,sql,1,1。還有一些同行更提出了用set rs=conn.execute(sql):res=rs.getRows(100)來優化ASP程序。其實在沒有做此實驗前,我也是很相信這種方法的。實際效果果真如此嗎?經過一番測試,我發現結果遠非如此,set rs=server.createobject(“ADODB.recordset”)的方法比set rs=conn.execute的方法快4~5倍。這個結果您信嗎?不信,更我來一起做這個測試。

數據說明真相。首先創建一個多記錄的數據庫。

set conn=createobject("adodb.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source=E:\labs\miaoqiyuan.cn\g.mdb"
do while conn.execute("select count(id) from site")(0)1000000
	conn.execute("insert into site(sitename,siteadmin,siteurl,sitekey) values('苗啟源','http://localhost/app_login/','http://www.miaoqiyuan.cn','e10adc3949ba59abbe56e057f20f883e')")
loop

經過幾個小時的運行,我得到了一個有63萬多條記錄的數據庫。數據庫大小為99.7MB(測試數據庫下載地址rs-execute-test.rar)。

為了保證數據的真實性,我們用公共的頭部header.asp來保存數據庫連接字符串。footer.asp來保存運行時間。

運行環境,Windows 2003 Server SP2。IIS6.0,CPU E2200 2.2GHz,內存2Gx2。硬盤300G SATA+80G ATA。

公共頭部:header.asp

%
startTme=timer()
set conn=server.createobject("ADODB.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source="server.mappath("g.mdb")
%>

公共底部:footer.asp

hr />總共用時: %=(timer()-startTme)*1000%>毫秒

測試方法:以三種方式,每頁100條記錄。同時讀取第6000頁到6099頁的記錄共一萬條,并測出運行時間。

test1.asp,采用set rs=server.createobject(“ADODB.recordset”)的方法。

 %
for k=0 to 100
	response.write "br />br />第"(6000+k)"頁hr />"

	set rs=server.createobject("adodb.recordset")
	rs.open "select * from site",conn,1,1
	rs.pagesize=100
	rs.absolutepage=6000+k
	i=0
	do while not rs.eof and i100
		i=i+1
		response.write rs("id")":"rs("sitename")"br />"vbCrlf
		rs.movenext
	loop
	rs.close
	set rs=nothing

next
%>

test2.asp 采用set rs=conn.execute()的方法

 %
for k=0 to 100
	response.write "br />br />第"(6000+k)"頁hr />"

	set rs=conn.execute("select * from site")
	rs.movefirst
	rs.move (6000+k)*100
	i=0
	do while not rs.eof and i100
		i=i+1
		response.write rs("id")":"rs("sitename")"br />"vbCrlf
		rs.movenext
	loop
	rs.close
	set rs=nothing

next
%>

至于getRows,這種方法只能算是返回結果的優化,并不能算是一種方法。我們采用兩種返回結果的方式測試。test3.asp采用set rs=server.createobject(“ADODB.recordset”)的方法,test4.asp采用set rs=conn.execute(sql)的方法

 %
for k=0 to 100
	response.write "br />br />第"(6000+k)"頁hr />"

	set rs=server.createobject("adodb.recordset")
	rs.open "select * from site",conn,1,1
	rs.pagesize=100
	rs.absolutepage=6000+k
	res=rs.getRows(100)
	rs.close
	set rs=nothing
	for i=0 to 99
		response.write res(0,i)":"res(1,i)"br />"vbCrlf
	next

next
%>
 %
for k=0 to 100
	response.write "br />br />第"(6000+k)"頁hr />"

	set rs=conn.execute("select * from site")
	rs.movefirst
	rs.move (6000+k)*100
	res=rs.getRows(100)
	rs.close
	set rs=nothing
	for i=0 to 99
		response.write res(0,i)":"res(1,i)"br />"vbCrlf
	next

next
%>

下面是我的測試結果:

文件名 test1.asp test2.asp test3.asp test4.asp
第一次測試 4281.25毫秒 20656.25毫秒 4281.25毫秒 18671.88毫秒
第二次測試 4234.375毫秒 25171.88毫秒 4312.5毫秒 13781.25毫秒
第三次測試 4328.125毫秒 20031.25毫秒 4234.375毫秒 19093.75毫秒

為什么會出現這種結果呢?set rs=conn.execute(sql),set rs=server.createobject(“ADODB.recordset”)為什么為相差這么多?對比一下test1.asp、test3.asp與test2.asp、test4.asp,除了返回結果的方式不同,還有一處就是rs.move。難道是這個原因?把test3.asp的代碼稍微修改一下。存為test5.asp。

 %
for k=0 to 100
	response.write "br />br />第"(6000+k)"頁hr />"

	set rs=server.createobject("adodb.recordset")
	rs.open "select * from site",conn,1,1
	rs.movefirst
	rs.move (6000+k)*100
	res=rs.getRows(100)
	rs.close
	set rs=nothing
	for i=0 to 99
		response.write res(0,i)":"res(1,i)"br />"vbCrlf
	next

next
%>

經過測試,test5.asp能比test3.asp快0.1~0.2秒,如果讀取100條數據,這點差距可以忽略不計。

由此可見:set rs=conn.execute的方式確實比set rs=server.createobject(“ADODB.recordset”)方式慢,在學校的時候,老師教的一般都是set rs=server.createobject(“ADODB.recordset”)的方法,真正工作室,學習所謂的高手set rs=conn.execute優化的方法,結果最終發現,而鄙視用老師教的方法寫程序的同行,最終發現還是老師教的速度快,而且set rs=server.createobject(“ADODB.recordset”)的方法比set rs=conn.execute的方法快4~5倍。囧。。。。

難道set rs=conn.execute就一無是處了嗎?在數據插入方面,兩者的差別有多大呢?

下面是其他網友的補充

沒有可比性,為什么非要比呢?
set rs=conn.execute()
rs.getrows()
這種方法一般用在數據量少的情況下,比如說只有幾十幾百條數據的情況下,它只讀一次數據庫,然后把結果存入一個二維數組中,在這之后的操作就不需要數據庫,而是直接對內存中的數據進行操作了,速度絕對比用常規方法快,而且也節省資源。而用常規方法的話,數據庫操作得多少次?而在日常的情況下,一次讀取大量數據的情況是很少的,所以在很多地方都提到使用上面這種方法,就是緣于此。
還有上面比的分頁,常規方法由于它自身的局限,對數據庫的操作很費資源的,別說只是快那零點幾秒,好的程序到最后拼的就是那零點幾秒。

rs.open sql,conn 與conn.execute(sql)的區別

什么時候用什么?
那就憑個人經驗積累的感覺了:
如果只需要一筆帶過的碰碰數據庫,用execute
如果要對數據庫作比較龐雜的操作!則最好用 rs.open

rs.open sql,conn:如果sql是delete,update,insert則會返回一個關閉的記錄集,在使用過程中不要來個rs.close在文件最后再寫rs.close中間可以來多個記錄集rs1.open sql1,conn,最后一塊關閉記錄集:rs.close rs1.close

conn.execute(sql):如果sql是update,insert,delete則應該使用conn.execute(sql)也可以不要括號conn.execute sql

如果sql是select語句則應該使用set rs=conn.execute(sql)括號一定要,不能省略:這是因為vb的特性,帶返回值的調用必須加括號,不帶返回值的調用可以不要括號。

1.conn.execute

sql="select * from admin where username='xiaozhu'"
set rs=conn.execute(sql)
'執行完以后自動關閉記錄集
'最后只需要關閉連接就可以了
conn.close
set conn=nothing

2.rs.open

set rs=server.createobject("adodb.recordset")
sql="select * from admin where username='xiaozhu'"
rs.open sql,conn,1,1
'可以自己設定一些參數,即鎖定和游標的移動方式
'最后要關閉記錄集和連接
rs.close
set rs=nothing
conn.close
set conn=nothing

3.command.execute

sql="select * from admin where username='xiaozhu'"
set rs=command.execute(sql)

1.
set rs=conn.execute("如果是select語句") 得到的rs.recordcount=-1
rs.open sql,conn("sql為select語句") 得到的rs.recordcount為正常的記錄數


2.
rs.open是打開數據庫 conn.execute 是執行SQL指令
set rs=conn.execute(insert,update,delete)返回一個關閉了的記錄集
set rs=conn.execute(select)返回一個沒有關閉的記錄集

 3.
CONN.EXECUTE(SQL,RowsAffected,C)

  參數含義:

  SQL的值可以是SQL語句、表名、存儲過程名,也可以是數據提供者所能接受的任意字符串。為了提高性能,最好為C參數指定合適的值

  可選參數RowsAffected將返回INSERT、UPDATE或DELETE查詢執行以后所影響的數目。這些查詢會返回一個關閉的Recordset對象。

  一個SELECT查詢將返回RowsAffected值為-1并且返回帶有一行或多行內容的打開的Recordset。

 4.
conn.execute sql適合于不需返回recordset對象時使用,比如下面的代碼:
sql="delete from enews where id="cstr(id)
conn.execute sql

如果需要返回recordset對象,則使用如下代碼:
sql="select from enews where id="cstr(id)
set rs = conn.execute(sql)

如果去掉execute(sql)這兒的括號(即為set rs = conn.execute sql),就會提示“語句未結束”這樣的錯誤提示,我翻看了一下語法格式,發現有二種格式,詳解如下:

格式一:Connection對象名.Execute(SQL指令).
格式二:Connection對象名.Execute(數據表名)。
附:

set rs = conn.execute(sql) 
 
  是帶有返回值的,一般sql為查詢的時候使用。如 
  set rs = conn.execute("select * from ...") 
  當然執行insert into 和delete也是可以的 
  set rs = conn.execute("insert into table (f1,f2..") 
  但是要創建Recordset對象,占用服務器資源。在insert into, delete的時候我們一般不需要返回記錄集。所以我是這樣認為的: 
 
  在使用查詢的時候,用 set rs = conn.execute("select * from table") 
  在插入和刪除時候,用 conn.execute("delete from table where ...") 
 
  第二種方式代碼簡潔,不需要顯式地創建Recordset對象(但實際上好象是隱式創建的) 
 
  第二種方法還有一些簡潔的寫法:如,最某表的記錄數 
 
  dim count 
  count = conn.execute(select count(*) from table)(0) 
  上面的語句等于 
  count = conn.execute(select count(*) from table).fields(0).value 
 
  綜上:區別在于set rs = conn.execute是顯示創建recordset對象,而conn.execute是隱式的。 
  能用conn.execute的時候就用conn.execute,好處有 
  一、代碼簡潔 
  二、效率應該有所提高

再摘引一下:(srnld(天涯))

形成記錄集的方法有三種 CONN.execute   rs.open   Command.execute 
  方法用法大大不通 
 
  通常 Set rs=CONN.execute(SQL) 
  或直接 rs=CONN.execute(SQL) 
 
  和   Set rs=Server.CreateObject("ADODB.Recordset") 
    rs.open SQL,CONN,0,1   或 rs.open SQL,CONN 
  這種情況 通常open比上一個性能要好那么一丁點 
  (   command對象更靈活,執行范圍更廣) 
 
  使用 CONN.execute 可以不用關閉直接執行下一個 set rs=conn.execute(SQL) 
  但性能速度會大打折扣!! 
  大約要慢 2~5倍!!(這是我在msSQL循環1000次親自測試過的,不信你馬上自己測試),所以執行下一個 rs=conn.execute之前!!一定要關閉掉!是個好習慣! 
  使用單一對象的rs   rs.open在open下一個記錄集之前,必需要求顯示關閉,否則出錯,速度在SQL,CONN,0,1的情況下可前者基本一樣 
 
  所以我喜歡使用直設置一個 CreateObject("adodb.recordser")(在不需要多個記錄集交錯操作的情況下,多個也不礙是!) 
  然后從頭用到尾!!! 
  開門關門開門關門~~~~~咵踏咵踏~~~~ 
  最后一個 set rs=nothing 化上句號,爽! 
 
  更主要是 open提供非常靈活的操作數據庫元數據的非常多的屬性!! 
  打開百寶箱,金光燦燦什么都看見! 
  有很多情況下是非得用open來做的! 
  而conn.execute 想黑布下換膠卷~~~偷偷摸摸~~非常單一!!! 
 
  比如: 
 
  rs1.open SQL1,conn,0,1 
  rs.open SQL,conn,1,3 
  if rs(0)0 then rs(0)=0 
  rs(1)=aaa 
  rs(2)=bbb 
  rs.update ' 更新記錄集寫到數據庫 
 
  rs.addnew '加一條新記錄 
  rs(0)=1 
  rs(1)=ddd 
  rs(2)=kkk 
  rs.update 
  id=rs(3)   rs(s) '取的字段是自動編號 立即獲得新記錄的自動編號id //這是非常常用的 
 
  rs1.addnew 對rs1添加關連使用id rs的新記錄 
  rs1("id")=id 
  rs1(1)=... 
  .. 
  rs1.update 
 
  rs1.close:set rs1=nothing 
  rs.close:set rs=nothing 
 
 
  上面的操作如果采用CONN.execute 則要用到四個 CONN.execute 
 
  CONN.execute("update ..") 
  CONN.execute("insert into 表1:") 
  rs=CONN.execute("select 新的自動 id") 
  CONN.execute("insert into 表二") 
  那一種方法邏輯條理更好~~一目了然 
 
  ====================== 
 
  還有一個有趣的使用Recordset open記錄的方法!! 
  我想起來是有點費解 
 
  Set rs=server.CreateObject("Adodb.recordset") 
  Set rs=server.CreateObject("Adodb.recordset") 
 
  rs.open SQL1,CONN 
  rs.open SQL2,CONN 
 
  '嘿嘿~~~這是同時設置同名的兩個對象來打開兩個記錄集,而且是可用的! 
  '只要取的列名合乎這兩個記錄集中元數據 
  '則正常操作!! 
  擴展開來 
 
  Set rs=server.CreateObject("Adodb.recordset") 
  Set rs=server.CreateObject("Adodb.recordset") 
  Set rs=server.CreateObject("Adodb.recordset") 
  Set rs=server.CreateObject("Adodb.recordset") 
 
  rs.open SQL1,CONN 
  rs.open SQL2,CONN 
  rs.open SQL3,CONN 
  rs.open SQL4,CONN 
 
  這樣大于二個同名的 rs我還沒試過!! 
 
  感覺有點相當與 SQL聯合查詢再打開記錄集~~~ 
  以前我這樣用過!!應該不是眼花!!

到此這篇關于set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比的文章就介紹到這了,更多相關conn.execute與ADODB.recordset的對比內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:撫州 深圳 伊春 銅川 威海 崇左 西藏 晉城

巨人網絡通訊聲明:本文標題《set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比》,本文關鍵詞  set,conn.execute,server.createobject,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比》相關的同類信息!
  • 本頁收集關于set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能對比的相關信息資訊供網民參考!
  • 推薦文章
    精品视频免费观看| 日韩在线观看视频黄| 精品视频在线看 | 国产高清视频免费| 成人免费一级毛片在线播放视频| 国产视频一区二区三区四区| 亚洲 国产精品 日韩| 九九干| 韩国三级视频网站| 成人免费一级纶理片| 国产一区二区精品尤物| 亚欧视频在线| 国产不卡高清在线观看视频| 成人影院久久久久久影院| 欧美大片一区| 日韩一级黄色片| 日韩欧美一二三区| 日韩一级精品视频在线观看| 精品国产亚洲人成在线| 四虎久久影院| 韩国三级香港三级日本三级| 欧美激情影院| 国产一区免费观看| 亚欧乱色一区二区三区| 你懂的在线观看视频| 久久99这里只有精品国产| 成人高清护士在线播放| 免费毛片播放| 国产伦精品一区二区三区在线观看| 精品视频在线观看视频免费视频 | 国产精品免费久久| 久久99这里只有精品国产| 精品久久久久久中文字幕一区| 久久精品大片| 成人免费高清视频| 高清一级片| 欧美a级成人淫片免费看| 国产高清在线精品一区二区 | 二级片在线观看| 国产精品12| 久久久久久久网| 国产成人精品影视| 精品美女| 黄色免费网站在线| 国产一区精品| 午夜精品国产自在现线拍| 欧美a免费| 韩国毛片免费| 91麻豆精品国产片在线观看| 久久成人性色生活片| 午夜激情视频在线观看| 国产91精品系列在线观看| 四虎影视库| 国产福利免费视频| 国产视频一区二区三区四区| 日韩一级精品视频在线观看| 午夜欧美成人香蕉剧场| 久久99青青久久99久久| 国产麻豆精品| 麻豆系列国产剧在线观看| 日韩欧美一及在线播放| 国产高清在线精品一区a| 九九久久国产精品| 999久久狠狠免费精品| 欧美另类videosbestsex久久| 久久精品大片| 欧美激情一区二区三区中文字幕| 毛片高清| 国产a网| 精品国产一区二区三区久久久蜜臀 | 精品国产一区二区三区精东影业| 91麻豆国产级在线| 精品毛片视频| 色综合久久天天综合| 精品视频在线看 | 99热精品在线| 亚欧乱色一区二区三区| 九九热国产视频| 精品视频在线看 | 一本高清在线| 国产国产人免费视频成69堂| 亚洲精品影院| 国产麻豆精品免费视频| 精品在线观看一区| 成人影视在线播放| 精品视频在线观看一区二区三区| 国产亚洲免费观看| 久久久久久久免费视频| 亚洲精品中文字幕久久久久久| 99久久网站| 国产成人啪精品视频免费软件| 在线观看成人网 | 91麻豆精品国产综合久久久| 国产亚洲免费观看| 精品视频免费在线| 夜夜操网| 国产亚洲免费观看| 日韩一级精品视频在线观看| 国产91丝袜在线播放0| 一级女性全黄久久生活片| 精品国产一区二区三区久| 可以免费在线看黄的网站| 精品视频在线观看视频免费视频| 亚洲 欧美 成人日韩| 国产麻豆精品免费视频| 欧美一区二区三区性| 国产激情一区二区三区| 亚洲精品永久一区| 欧美一级视频免费观看| 成人免费网站久久久| 久久99爰这里有精品国产| 一级女性全黄生活片免费| 毛片的网站| 成人a级高清视频在线观看| 国产一区二区精品久久91| 精品视频在线看| 久久精品免视看国产成人2021| 99久久精品国产免费| 日韩欧美一及在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人在激情在线视频| 日韩在线观看免费完整版视频| 国产网站免费在线观看| 精品国产亚洲人成在线| 成人免费观看视频| 精品国产香蕉在线播出| 欧美一区二区三区性| 99久久精品国产高清一区二区| 天天做人人爱夜夜爽2020| 欧美激情影院| 台湾毛片| 91麻豆爱豆果冻天美星空| 久久国产影院| 国产福利免费视频| 国产不卡在线看| 亚久久伊人精品青青草原2020| 午夜激情视频在线播放| 国产不卡福利| 国产极品精频在线观看| 成人免费观看视频| 国产麻豆精品视频| 亚洲精品中文字幕久久久久久| 精品久久久久久免费影院| 午夜欧美成人香蕉剧场| 日韩女人做爰大片| 国产成人精品在线| 亚飞与亚基在线观看| 午夜家庭影院| 麻豆系列国产剧在线观看| 久久久成人网| 免费一级生活片| 日本在线不卡免费视频一区| 日韩欧美一二三区| 午夜欧美成人香蕉剧场| 日韩中文字幕在线播放| 99色精品| 国产国产人免费视频成69堂| 日韩一级黄色片| 国产伦久视频免费观看 视频| 精品久久久久久免费影院| 99色精品| 九九精品久久| 欧美激情中文字幕一区二区| 精品国产一区二区三区久久久蜜臀 | 99热热久久| 四虎久久精品国产| 999精品在线| 一级片免费在线观看视频| 毛片高清| 九九九国产| 香蕉视频三级| 黄色免费网站在线| 国产精品免费久久| 国产91视频网| 欧美1区| 久久国产影视免费精品| 超级乱淫黄漫画免费| 青青久久精品| 亚洲精品影院| 午夜在线影院| 国产91精品系列在线观看| 成人影视在线播放| 日韩在线观看网站| 精品久久久久久影院免费| 日日爽天天| 久久久久久久网| 欧美国产日韩一区二区三区| 免费国产在线视频| 韩国三级视频网站| 午夜激情视频在线播放| 成人免费网站久久久| 毛片高清| 国产网站免费视频| 国产不卡在线播放| 欧美一级视频免费| 毛片高清| 中文字幕一区二区三区精彩视频| 九九九国产| 韩国毛片 免费| 四虎影视精品永久免费网站|