新聞中心
sqlserver游標(biāo)
--申明一個(gè)游標(biāo)
十余年的峰峰礦網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整峰峰礦建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“峰峰礦網(wǎng)站設(shè)計(jì)”,“峰峰礦網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
DECLARE MyCursor CURSOR
FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo
--打開一個(gè)游標(biāo)
OPEN MyCursor
--循環(huán)一個(gè)游標(biāo)
DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
WHILE @@FETCH_STATUS =0
BEGIN
print 'name'+@BookName
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
END
--關(guān)閉游標(biāo)
CLOSE MyCursor
--釋放資源
DEALLOCATE MyCursor
游標(biāo)屬于行級(jí)操作 消耗很大
SQL查詢是基于數(shù)據(jù)集的
所以一般查詢能有 能用數(shù)據(jù)集 就用數(shù)據(jù)集 別用游標(biāo)
數(shù)據(jù)量大 是性能殺手
sql server執(zhí)行幾十萬條sql很慢,怎么辦?
指的是在SSMS里面執(zhí)行么?如果是文件的話,直接用導(dǎo)入操作。如果是編程方式的而且剛好是.net的話,用SqlBulkCopy試試,批量插入數(shù)據(jù)非???/p>
sql server數(shù)據(jù)庫查詢慢怎么優(yōu)化
在安裝有SQLServer數(shù)據(jù)庫的計(jì)算機(jī)上,我們?cè)谑褂脭?shù)據(jù)庫的過程中,有時(shí)候會(huì)在任務(wù)管理器里發(fā)現(xiàn)sqlservr.exe這個(gè)進(jìn)程的內(nèi)存和CPU占用率較高。
接下來我們來看一下,如何解決上面這個(gè)問題,需要設(shè)置SQLServer數(shù)據(jù)庫的內(nèi)存配置。登錄數(shù)據(jù)庫,這里使用的是SQLServer2008,右鍵點(diǎn)擊最上方的服務(wù)器名,在彈出的菜單中,點(diǎn)擊【屬性】
打開服務(wù)器屬性窗口。默認(rèn)顯示的是第一項(xiàng)【常規(guī)】?jī)?nèi)容,點(diǎn)擊第二項(xiàng)【內(nèi)存】進(jìn)行內(nèi)存配置。
點(diǎn)擊【內(nèi)存】后,打開服務(wù)器內(nèi)存選項(xiàng)配置界面。這里的【使用AWE分配內(nèi)存】可以對(duì)內(nèi)存進(jìn)行擴(kuò)展支持,我們要做的是更改下方的最大服務(wù)器內(nèi)存。這個(gè)數(shù)值根據(jù)自己服務(wù)器內(nèi)存大小來做適當(dāng)設(shè)置。
5
個(gè)人建議設(shè)置本機(jī)內(nèi)存的一半或稍微高一點(diǎn),如機(jī)器內(nèi)存為2G,那么我們這里填寫1000。需要注意的是內(nèi)存設(shè)置調(diào)小以后,在數(shù)據(jù)庫執(zhí)行較復(fù)雜SQL語句的時(shí)候,可能會(huì)比較慢,出現(xiàn)這種情況,我們?cè)龠m當(dāng)上調(diào)最大內(nèi)存配置大小。
SQLserver 大批量更新插入的時(shí)候游標(biāo)怎么優(yōu)化
盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。
使用基于游標(biāo)的方法之前,應(yīng)先尋找基于集的解決方案來解決問題,基于集的方法通常更有效。
最好的改進(jìn)光標(biāo)性能的技術(shù)就是:能避免時(shí)就避免使用游標(biāo)
若有時(shí)無法避免使用游標(biāo),則可以用如下技巧來優(yōu)化游標(biāo)的性能。
(1). 除非必要否則不要使用static/insensitive游標(biāo)。打開static游標(biāo)會(huì)造成所有的行都被拷貝到臨時(shí)表。這正是為什么它對(duì)變化不敏感的原因——它實(shí)際上是指向臨時(shí)數(shù)據(jù)庫表中的一個(gè)備份。很自然,結(jié)果集越大,聲明其上的static游標(biāo)就會(huì)引起越多的臨時(shí)數(shù)據(jù)庫的資源爭(zhēng)奪問題。
(2). 除非必要否則不要使用keyset游標(biāo)。和static游標(biāo)一樣,打開keyset游標(biāo)會(huì)創(chuàng)建臨時(shí)表。雖然這個(gè)表只包括基本表的一個(gè)關(guān)鍵字列(除非不存在唯一關(guān)鍵字),但是當(dāng)處理大結(jié)果集時(shí)還是會(huì)相當(dāng)大的。
(3). 當(dāng)處理單向的只讀結(jié)果集時(shí),使用fast_forward代替forward_only。使用fast_forward定義一個(gè)forward_only,則read_only游標(biāo)具有一定的內(nèi)部性能優(yōu)化。
(4). 使用read_only關(guān)鍵字定義只讀游標(biāo)。這樣可以防止意外的修改,并且讓服務(wù)器了解游標(biāo)移動(dòng)時(shí)不會(huì)修改行。
(5). 小心事務(wù)處理中通過游標(biāo)進(jìn)行的大量行修改。根據(jù)事務(wù)隔離級(jí)別,這些行在事務(wù)完成或回滾前會(huì)保持鎖定,這可能造成服務(wù)器上的資源爭(zhēng)奪。
(6). 小心動(dòng)態(tài)光標(biāo)的修改,尤其是建在非唯一聚集索引鍵的表上的游標(biāo),因?yàn)樗麄儠?huì)造成“Halloween”問題——對(duì)同一行或同一行的重復(fù)的錯(cuò)誤的修改。因?yàn)镾QL Server在內(nèi)部會(huì)把某行的關(guān)鍵字修改成一個(gè)已經(jīng)存在的值,并強(qiáng)迫服務(wù)器追加下標(biāo),使它以后可以再結(jié)果集中移動(dòng)。當(dāng)從結(jié)果集的剩余項(xiàng)中存取時(shí),又會(huì)遇到那一行,然后程序會(huì)重復(fù),結(jié)果造成死循環(huán)。
(7). 對(duì)于大結(jié)果集要考慮使用異步游標(biāo),盡可能地把控制權(quán)交給調(diào)用者。當(dāng)返回相當(dāng)大的結(jié)果集到可移動(dòng)的表格時(shí),異步游標(biāo)特別有用,因?yàn)樗鼈冊(cè)试S應(yīng)用程序幾乎馬上就可以顯示行
使用SQL Server 2000的查詢分析器時(shí)運(yùn)行緩慢,請(qǐng)問如何解決?
解決方案
服務(wù)包信息
要解決此問題, 獲取用于 Microsoft SQL Server 2000 最新 ServicePack。 有關(guān)其他信息, 請(qǐng)單擊下列文章編號(hào)以查看 Microsoft 知識(shí)庫中相應(yīng):
290211 () 如何獲取最新 SQL Server 2000 服務(wù)包
回到頂端
修復(fù)信息
英文版的此修補(bǔ)程序具有文件屬性如下表中列出 (或更高版本)。 協(xié)調(diào)通用時(shí)間 (UTC) 中列出的這些文件日期和時(shí)間。 當(dāng)您查看文件信息, 將轉(zhuǎn)換為本地時(shí)間。 要查找 UTC 與本地時(shí)間, 區(qū)別控制面板中日期和時(shí)間工具中使用 時(shí)區(qū) 選項(xiàng)卡。 Date Time Version Size File name
----------------------------------------------------------------------------
26-Feb-2003 03:41 2000.80.777.0 29,244 bytes Dbmslpcn.dll
08-Feb-2003 05:43 786,432 bytes Distmdl.ldf
08-Feb-2003 05:43 2,359,296 bytes Distmdl.mdf
30-Jan-2003 01:55 180 bytes Drop_repl_hotfix.sql
01-Feb-2003 00:32 2000.80.763.0 1,557,052 bytes Dtsui.dll
30-Jan-2003 05:18 746,470 bytes Instdist.sql
30-Jan-2003 01:55 1,402 bytes Inst_repl_hotfix.sql
08-Feb-2003 06:40 2000.80.765.0 90,692 bytes Msgprox.dll
01-Apr-2003 02:07 1,873 bytes Odsole.sql
05-Apr-2003 01:46 2000.80.800.0 62,024 bytes Odsole70.dll
02-Apr-2003 21:48 2000.80.796.0 57,904 bytes Osql.exe
02-Apr-2003 23:15 2000.80.797.0 279,104 bytes Pfutil80.dll
04-Apr-2003 21:27 1,083,467 bytes Replmerg.sql
04-Apr-2003 21:53 2000.80.798.0 221,768 bytes Replprov.dll
08-Feb-2003 06:40 2000.80.765.0 307,784 bytes Replrec.dll
01-Apr-2003 02:23 1,084,828 bytes Replsys.sql
03-Apr-2003 18:14 104,868 bytes Sp3_serv_uni.sql
19-Mar-2003 18:20 2000.80.789.0 28,672 bytes Sqlevn70.rll
28-Feb-2003 01:34 2000.80.778.0 176,696 bytes Sqlmap70.dll
08-Feb-2003 06:40 2000.80.765.0 57,920 bytes Sqlrepss.dll
05-Apr-2003 01:47 2000.80.800.0 7,540,817 bytes Sqlservr.exe
08-Feb-2003 06:40 2000.80.765.0 45,644 bytes Sqlvdi.dll
26-Feb-2003 03:41 2000.80.777.0 29,244 bytes Ssmslpcn.dll
26-Feb-2003 03:41 2000.80.777.0 82,492 bytes Ssnetlib.dll
17-Mar-2003 14:49 727,132 bytes Sysmessages.sym
28-Feb-2003 01:34 2000.80.778.0 98,872 bytes Xpweb70.dll
注意 因文件依賴性, 最近修復(fù)或包含文件功能還可能包含附加文件。
回到頂端
狀態(tài)
Microsoft 已確認(rèn)這是問題早在 Microsoft SQL 服務(wù)器 2000 Service Pack 4 得到了已首先解決問題是 " 適用于 " section.This 中列出, Microsoft 產(chǎn)品中。
回到頂端
SQLServer 試圖從緩沖池內(nèi)存用于大多數(shù)內(nèi)部分配, 但大于 8KB 請(qǐng)求路由到操作系統(tǒng)正常 allocators。 默認(rèn)情況下, SQLServer 保留諸如線程也用于這些類型的分配和有限的地址空間堆棧空間、 COM 對(duì)象、 擴(kuò)展存儲(chǔ)過程, 等。 g 命令行參數(shù) - 通過使用您可以修改此區(qū)域的大小。 有關(guān)詳細(xì)信息請(qǐng)參閱 SQLServer 聯(lián)機(jī)叢書有關(guān) - g 參數(shù),。
當(dāng) SQL Server 嘗試為這些大分配, 之一分配虛擬內(nèi)存, 該操作失敗, 它將嘗試刪除 hopes 是釋放一部分這個(gè)內(nèi)存緩存查詢計(jì)劃。 將即使他們已不使用任何此內(nèi)存在 SQL Server 2000 Service Pack 3 (SP 3), 之前此操作從緩存, 刪除所有查詢計(jì)劃。 SQLServer2000SP 引入, 從緩存中刪除只查詢計(jì)劃已知在使用此內(nèi)存的更改。 引入此更改目的問題其中某些查詢計(jì)劃用于游標(biāo)未被刪除。
偶爾即使使用此修復(fù)程序, 可能看到錯(cuò)誤消息。 隨著時(shí)間 (分鐘) 到小時(shí)有可能, 建立額外緩存計(jì)劃并再次出現(xiàn)該信息。 這可能是正常并通過本身不作為一個(gè)符號(hào)的問題應(yīng)采取。
回到頂端
--------------------------------------------------------------------------------
這篇文章中的信息適用于:
? Microsoft SQL Server 2000 Developer Edition
? Microsoft SQL Server 2000 Standard Edition
? Microsoft SQL Server 2000 Enterprise Edition
? Microsoft SQL Server 2000 Personal Edition
? Microsoft SQL Server 2000 Workgroup Edition
? Microsoft SQL Server 2000 Desktop Engine (Windows)
? Microsoft SQL Server 2000 64-bit Edition
回到頂端
關(guān)鍵字: kbhotfixserver kbqfe kbqfe kbfix kbbug kbsqlserv2000presp4fix KB818095 KbMtzh kbmt
回到頂端
Microsoft和/或其各供應(yīng)商對(duì)于為任何目的而在本服務(wù)器上發(fā)布的文件及有關(guān)圖形所含信息的適用性,不作任何聲明。 所有該等文件及有關(guān)圖形均"依樣"提供,而不帶任何性質(zhì)的保證。Microsoft和/或其各供應(yīng)商特此聲明,對(duì)所有與該等信息有關(guān)的保證和條件不負(fù)任何責(zé)任,該等保證和條件包括關(guān)于適銷性、符合特定用途、所有權(quán)和非侵權(quán)的所有默示保證和條件。在任何情況下,在由于使用或運(yùn)行本服務(wù)器上的信息所引起的或與該等使用或運(yùn)行有關(guān)的訴訟中,Microsoft和/或其各供應(yīng)商就因喪失使用、數(shù)據(jù)或利潤所導(dǎo)致的任何特別的、間接的、衍生性的損害或任何因使用而喪失所導(dǎo)致的之損害、數(shù)據(jù)或利潤不負(fù)任何責(zé)任。
;sid=1055
sqlserver查詢速度慢
可以換個(gè)方式重寫這些代碼。這樣循環(huán)相信你也快不到哪去。
另外,把你的SQL語句response出來,放到分析器執(zhí)行一下,看一下時(shí)間。
If Rs.Eof and Rs.Bof Then
Do While Not Rs.EOF這個(gè)也不用了,不是和前面判斷重復(fù)了。
新聞標(biāo)題:sqlserver游標(biāo)慢,sqlserver游標(biāo)使用和循環(huán)
分享地址:http://www.dlmjj.cn/article/dsegijc.html