青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Update操作一定是先Delete再Insert嗎?

轉載:http://www.cnblogs.com/liuxinhuahao/archive/2010/01/15/1648749.html

Update操作一定是先DeleteInsert嗎?

Update在數據庫中的執行是怎么樣的?“Update操作是先把數據刪除,然后再插入數據”。在網上看了很多也都是這么認為的。但在查閱到一些不同看法的時候我進行了一些驗證,發現還有其它的情況。

這里我分三種情況來講:

1、更改沒有索引列的字段,更改前和更改后的字符串長度一樣;
2
更改沒有索引列的字段,更改后比更改前的字符串長
3
、更改聚集索引字段。

一、 創建表、索引和數據:

--創建表MyTable1

IF EXISTS(SELECT * FROM sysobjects WHERE [name]='MyTable1' AND [type]='u')

    DROP TABLE MyTable1

GO

CREATE TABLE MyTable1

(

    ID     INT,

    SName  VARCHAR(20)  

);

--創建索引

CREATE UNIQUE CLUSTERED INDEX IX_ID ON MyTable1(ID);

 

INSERT INTO MyTable1 values( 1,'aaaa')

INSERT INTO MyTable1 values( 2,'bbbb')

INSERT INTO MyTable1 values( 3,'cccc')

GO

 

SELECT * FROM MyTable1 mt

GO

 

--創建表MyTable2

IF EXISTS(SELECT * FROM sysobjects WHERE [name]='MyTable2' AND [type]='u')

    DROP TABLE MyTable2

GO

CREATE TABLE MyTable2

(

    ID     INT,

    SName  VARCHAR(20)  

);

--創建索引

CREATE UNIQUE CLUSTERED INDEX IX_ID ON MyTable2(ID);

 

INSERT INTO MyTable2 VALUES ( 1,'aaaa')

INSERT INTO MyTable2 VALUES ( 2,'bbbb')

INSERT INTO MyTable2 VALUES ( 3,'cccc')

 

SELECT * FROM MyTable2 mt

二、 查看數據庫的ID號以及兩個表對應的ID

--查看數據庫的ID號以及兩個表對應的ID

select db_id() AS '數據庫ID',object_id('MyTable1')as 'MyTable1_ID',object_id('MyTable2')as 'MyTable2_ID'

 

 

 

查詢結果如下:

三、 查看數據頁的頁碼

--查看數據頁的ID

DBCC extentinfo(6,213575799)--這里是剛剛查出來的數據庫的ID,是表MyTable1ID

DBCC extentinfo(6,229575856)--這里是剛剛查出來的數據庫的ID,是表MyTable2ID

查詢結果如下:

表示MyTable1的數據存儲在第45頁,MyTable2的數據存儲在第94頁。

四、 查看2個表所在頁面上每條記錄的存儲情況:

DBCC traceon(3604) WITH NO_INFOMSGS              --打開跟蹤

DBCC IND('TestDB','MyTable1',0)               --列出所有頁和索引。

                                              --參數說明,:數據庫名;:表名;:索引的ID,表示堆,-1 表示顯示所有索引和IAMs, -2表示只顯示IAMs

 

DBCC PAGE(TestDB,1,45,1)                  --查看數據頁和索引

                                             --參數說明,:數據庫名;:數據頁文件文件組編號;:數據頁ID;:數據顯示類型(,)

語句執行后我們得到下面的結果:

1.   MyTable1Row – Offset

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                        

 

 

2.   MyTable2Row – Offset

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                 

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                   

 

    可以看到兩個表的存儲在數據庫中數據頁的位置是一樣的。這是因為一個頁只能放一個對象。

五、 下面我們來看第一種情況:更改沒有索引列的字段,更改前和更改后的字符串長度一樣;

UPDATE MyTable1 SET  SName = 'dddd' WHERE ID=2

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                        

 

發現他的存儲位置沒有發生改變。

再來看MyTable2

--先刪除后插入

DELETE FROM MyTable2 WHERE ID=2

INSERT INTO MyTable2(ID,SName)VALUES(2,   'dddd')

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)                             

 

MyTable2的存儲發生變化了,原先在115134之間存儲的是第二條記錄,現在這條記錄卻存儲到了153個字節以后了,而原來115134之間什么也沒存儲,這樣這里就形成了內部碎片。對于這種update后數據的存儲位置不發生變化的更新稱為現場更新,如果位置發生了改變就稱為非現場更新。

所以對于這種情形來說:update操作并不是先deleteinsert的。

六、 下面我們再來測試第二種情況:更改沒有索引列的字段,更改后比更改前的字符串長;

先更新表MyTable1,再查看數據頁的存儲情況:

UPDATE MyTable1 SET SName='aaaaaa' WHERE ID=2

DBCC PAGE(TestDB,1,45,1)

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)  

這時我們看到他的存儲和先DeleteInsert一樣了。

七、 我們再來看第三種情況:更改聚集索引字段

為了避免對數據庫的操作影響查看的難度,再執行一下創建表的語句。

數據更新之前的結果如下:

MyTable1

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)  

 

MyTable2

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                 

 

先對表MyTable1操作:更新ID

UPDATE MyTable1 SET ID = 0 WHERE ID=2

DBCC PAGE(TestDB,1,94,1)   --數據頁的位置已經發生改變

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)                 

再來對MyTable2操作:

DELETE FROM MyTable2 WHERE ID = 2

INSERT INTO MyTable2(ID,SName)VALUES(2,   'bbbb')

DBCC PAGE(TestDB,1,126,1)  --數據頁的位置已經發生改變

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)        

發現此時upadte為非現場更新,數據的存儲位置已經發生了改變。和我們所想的先DeleteInsert是一樣的。

其實在更改聚集索引鍵列的時候,也可能發生現場更新。比如有3條記錄分別為125,我們把其中的2更改為了3,由于3是在15之間的數字,所以在更改為3后,這條記錄還是會存儲在15之間,所以就是現場更新了。


posted on 2011-03-30 15:48 楊粼波 閱讀(934) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产视频网| 亚洲承认在线| 一区二区不卡在线视频 午夜欧美不卡在| 久久理论片午夜琪琪电影网| 一区免费视频| 欧美国产极速在线| 欧美精品在线免费播放| av成人福利| 一区二区三区视频免费在线观看| 国产精品久久久久9999吃药| 蜜桃久久av一区| 9久草视频在线视频精品| 欧美色另类天堂2015| 亚洲综合三区| 久久精品色图| 在线亚洲免费| 久久国产免费看| 亚洲靠逼com| 亚洲自拍偷拍麻豆| 亚洲大胆av| 亚洲视频一二三| 一区二区在线视频| 一区二区三区久久久| 黑人巨大精品欧美一区二区| 亚洲日本理论电影| 国产午夜精品理论片a级探花| 欧美高清视频一区二区三区在线观看 | 亚洲精品乱码久久久久久按摩观| 久久午夜视频| 欧美日韩一区精品| 久久久伊人欧美| 欧美日韩在线三区| 欧美sm重口味系列视频在线观看| 欧美日韩在线播放三区| 免费影视亚洲| 国产女主播一区二区三区| 欧美高清不卡| 狠狠色狠狠色综合系列| 一区二区三区成人| 亚洲理伦在线| 久久久精品tv| 久久国产精品亚洲77777| 欧美色区777第一页| 欧美成人久久| 国产一区在线免费观看| 亚洲午夜高清视频| 99视频精品| 欧美肥婆bbw| 免费视频亚洲| 一区二区视频免费在线观看| 亚洲欧美在线一区| 亚洲在线视频观看| 欧美日韩国产经典色站一区二区三区| 久久亚洲综合色| 国模一区二区三区| 性色av一区二区三区红粉影视| 亚洲一区免费网站| 欧美精品一区二区高清在线观看| 欧美1级日本1级| 好看不卡的中文字幕| 午夜亚洲伦理| 久久成人免费网| 国产欧美va欧美va香蕉在| 亚洲午夜黄色| 亚洲欧美一区二区三区在线| 欧美午夜一区二区| av成人免费观看| 亚洲欧美视频在线观看视频| 国产精品久久久久一区| 亚洲伊人网站| 久久久99国产精品免费| 国产综合婷婷| 久久蜜桃香蕉精品一区二区三区| 狼狼综合久久久久综合网| 亚洲人成网站在线播| 国产日韩欧美在线观看| 一区二区三区视频在线播放| 在线视频亚洲一区| 国产精品久久久久久av下载红粉| 亚洲视频第一页| 久久国内精品视频| 一区精品久久| 欧美激情一二三区| 国产精品99久久久久久久女警| 亚洲欧美日韩中文视频| 国产亚洲在线| 欧美成人午夜影院| 这里只有精品在线播放| 欧美亚洲日本网站| 精品动漫3d一区二区三区免费| 欧美超级免费视 在线| 一本久道久久综合中文字幕| 午夜精品福利在线| 又紧又大又爽精品一区二区| 欧美电影在线观看完整版| 亚洲视频在线观看网站| 久久中文字幕一区| 一区二区三区视频观看| 国产一区二区剧情av在线| 老司机久久99久久精品播放免费 | 久久久久久久久久久成人| 亚洲精品系列| 国产精品卡一卡二卡三| 久久久伊人欧美| 亚洲网站视频福利| 免费观看成人网| 亚洲欧美日韩中文播放| 亚洲精品久久久久久一区二区| 国产精品久久久久久久久借妻 | 久久中文字幕导航| 亚洲香蕉网站| 亚洲福利视频一区| 久久久久久久综合| 一区二区三区视频观看| 亚洲高清在线| 国产日韩欧美精品在线| 欧美日韩久久久久久| 久久久一本精品99久久精品66| 亚洲午夜久久久| 亚洲日本va午夜在线电影| 老司机精品视频一区二区三区| 亚洲网址在线| 亚洲日产国产精品| 在线免费精品视频| 国产日产欧美精品| 国产精品第一区| 欧美国产日韩一区二区在线观看| 久久精品国产免费看久久精品| 99亚洲视频| 亚洲日本aⅴ片在线观看香蕉| 免费日韩成人| 欧美成人日韩| 免费观看国产成人| 美女视频网站黄色亚洲| 久久久久9999亚洲精品| 久久成人综合网| 久久岛国电影| 久久国产日韩| 久久国产精品久久久久久电车| 午夜视频在线观看一区二区| 亚洲男人的天堂在线观看| 亚洲性线免费观看视频成熟| 日韩亚洲在线观看| 一本色道88久久加勒比精品| 亚洲精品在线看| 亚洲国产精品久久久久婷婷884| 一区二区三区四区五区精品| 亚洲美女电影在线| 亚洲免费高清视频| 夜久久久久久| 亚洲在线播放| 欧美一区高清| 久久久人成影片一区二区三区观看| 久久久不卡网国产精品一区| 久久久久久久久一区二区| 久久久午夜视频| 你懂的国产精品永久在线| 欧美成人激情视频| 欧美日韩午夜在线| 国产女主播一区二区| 激情婷婷久久| 亚洲人成网站色ww在线| 在线亚洲一区观看| 欧美一区二区三区啪啪| 久久综合999| 亚洲激情av| 亚洲欧美自拍偷拍| 久久婷婷久久| 欧美男人的天堂| 国产日韩欧美一区二区三区在线观看| 韩国久久久久| 日韩图片一区| 欧美一区二区三区免费观看视频 | 亚洲欧美精品中文字幕在线| 久久精品盗摄| 亚洲国产婷婷综合在线精品 | 老司机午夜精品| 亚洲精品少妇网址| 欧美一区二区三区久久精品| 久久久欧美精品| 欧美午夜精品久久久久久人妖 | 亚洲精品免费在线| 欧美一区二区三区成人| 欧美国产激情二区三区| 亚洲亚洲精品在线观看| 久久综合色天天久久综合图片| 欧美日韩在线大尺度| 韩国av一区二区三区| 国产精品99久久久久久久vr| 久久免费视频一区| 99这里有精品| 欧美91大片| 国产综合久久久久影院| 中文av字幕一区| 欧美电影在线观看完整版| 午夜久久影院| 欧美色区777第一页| 亚洲毛片在线| 免费在线看成人av| 翔田千里一区二区|