由SQL Server 2005大批量數據操作想起的

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">

問題提出:
      
sql server2005數據庫中建立兩個類型相同的數據表,如下

create table test1

(

    iId        int identity(1,1) not null,

    vTest1Code varchar(30)          not null,

    vName      varchar(30)          not null,

    dDate      datetime,

    primary key(iId)

)

create table test2

(

    Id     int identity(1,1) not null,

    Code   varchar(30)          not null,

    Name   varchar(30)          not null,

    date   datetime,

    primary key(Id)

)

兩表所佔用的系統空間

exec sp_spaceused 'test1'

exec sp_spaceused 'test2'

Name

Rows

Reserved

Data

Index_size

unused

 

Test1

0

0KB

0KB

0KB

0KB

 

Test2

0

0KB

0KB

0KB

0KB

 

         由上圖得知兩表所佔用的系統空間一致。

         執行數據插入操作

--測試TEST1

declare @startTime datetime

set @startTime=getdate()

declare @i int

set @i=1

while @i<100

begin

insert into test1(vTest1Code,vName) values('vCode'+CAST(@i as varchar(10)),'vName'+CAST(@i as varchar(10)))

set @i=@i+1

end

select [語句執行花費時間(毫秒)]=datediff(ms,@startTime,getdate())

go

--測試TEST2

declare @startTime datetime

set @startTime=getdate()

declare @i int

set @i=1

while @i<100

begin

insert into test2(Code,Name) values('vCode'+CAST(@i as varchar(10)),'vName'+CAST(@i as varchar(10)))

set @i=@i+1

end

select [語句執行花費時間(毫秒)]=datediff(ms,@startTime,getdate())

go

         插入耗時情況

 

test1語句執行花費時間(毫秒)

test2語句執行花費時間(毫秒)

100

30

30

1000

250

250

10000

2623

2516

100000

26453

26560

1000000

275110

282796

最後兩表所佔用的系統空間

exec sp_spaceused 'test1'

exec sp_spaceused 'test2'

Name

Rows

Reserved

Data

Index_size

unused

 

Test1

1000098

48520KB

48272KB

192KB

56KB

 

Test2

1000098

48520KB

48272KB

192KB

56KB

 

問題現象描述:

1、  在相同數據類型、長度,及約束、索引的情況下,執行千條及千條以內的數據插入操作時,字段長度、系統保留字對SQL語句的執行速度沒有影響或者影響很小;執行上萬條數據插入操作時,字段長度對SQL語句的執行速度影響很小;執行十萬條以上的數據操作時,系統保留字對SQL語句的執行速度影響明顯。

2、  數據字段長度、系統保留字對系統佔用的空間沒有任何影響。

3、  在大批量數據操作時,數據類型、長度,甚至數據字段是否爲系統保留字,對SQL語句的執性效率都有影響。

問題總結:

1、  SQL語句在執行時,將首先對相關數據表進行連接,然後進行過濾、分組、選擇字段、DISTINCTORDER BY等操作。由此,我們在進行數據查詢時,應儘量避免“*”連接,應考慮過濾的先後順序。

2、  謹慎使用遊標、觸發器、索引。

3、  儘量避免使用系統保留字,考慮在SQL語句中區分數據字段的大小寫,即SQL語句中的字段名的形式應和數據表中的字段名的形式一致。

 

 

發佈了22 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章