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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            国外成人性视频| 午夜精品久久久久久久99樱桃| 欧美国产日韩a欧美在线观看| 欧美在线看片| 精品999在线观看| 欧美吻胸吃奶大尺度电影| 久久精品国产视频| 一区二区av在线| 久久网站免费| 欧美亚洲免费电影| 亚洲欧美日韩国产中文在线| 一本大道久久a久久综合婷婷| 亚洲黄色在线视频| 在线综合欧美| 日韩一区二区久久| 亚洲主播在线| 久久国产欧美| 久久久久久伊人| 麻豆精品网站| 欧美日韩国产在线一区| 国产精品mm| 国产一区二区三区在线观看免费 | 99亚洲一区二区| 亚洲图片欧洲图片日韩av| 欧美一区二区播放| 欧美国产日韩精品| 亚洲一区影音先锋| 欧美不卡高清| 久久亚洲精品一区| 在线亚洲观看| 欧美一区二区日韩一区二区| 亚洲视频一区二区| 久久九九久精品国产免费直播| 久久蜜桃精品| 亚洲在线一区二区三区| 免费在线观看精品| 国产噜噜噜噜噜久久久久久久久| 亚洲国产第一| 久久这里有精品15一区二区三区| 亚洲精选久久| 欧美精品在线观看91| 极品少妇一区二区三区| 欧美在线黄色| 亚洲欧美日韩国产一区二区| 欧美激情一级片一区二区| 亚洲精品国产精品国自产在线| 亚洲久久成人| 久久久精彩视频| 国产亚洲欧美日韩在线一区 | 亚洲欧美日韩国产| 欧美日韩高清一区| 亚洲国产综合视频在线观看| 亚洲无人区一区| 日韩亚洲一区二区| 欧美精品免费看| 亚洲网站在线播放| 亚洲专区在线| 在线不卡视频| 99精品国产福利在线观看免费| 欧美日韩激情小视频| 欧美一站二站| 欧美丰满少妇xxxbbb| 亚洲欧美日本日韩| 久久免费视频一区| 亚洲一区欧美二区| 久久亚洲国产精品一区二区| 一区二区三区四区国产| 欧美有码在线观看视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲人成高清| 亚洲视屏在线播放| 欧美大香线蕉线伊人久久国产精品| 久久天天狠狠| 久久不射网站| 欧美韩日视频| 久热国产精品| 国产日韩专区| 亚洲手机视频| 亚洲欧美久久久久一区二区三区| 先锋影音一区二区三区| 久久尤物视频| 美女精品网站| 国产一区 二区 三区一级| 日韩一级黄色片| 亚洲一二三区视频在线观看| 欧美理论电影在线播放| 亚洲日韩欧美视频| 91久久午夜| 欧美日产在线观看| 一区二区久久久久久| 亚洲男人第一av网站| 国产精品视区| 久久精品99| 亚洲国产精品一区二区尤物区 | 久久久久久久久久看片| 久久精品中文字幕一区| 亚洲欧洲一区| 欧美视频三区在线播放| 亚洲午夜伦理| 欧美成人精品在线播放| 亚洲欧洲一区二区三区| 国产精品激情| 美女免费视频一区| 亚洲一区制服诱惑| 欧美国产免费| 午夜精品亚洲一区二区三区嫩草| 国内外成人在线视频| 久久午夜视频| 性久久久久久久久| 亚洲免费精品| 亚洲成人在线网| 久久精品人人做人人爽| 一本色道久久综合狠狠躁篇的优点| 国产精品外国| 能在线观看的日韩av| 噜噜噜91成人网| 午夜久久黄色| 久久久精品国产免大香伊| 亚洲人成高清| 亚洲国产精品嫩草影院| 久久久精品性| 久久综合色综合88| 久久精品国产清自在天天线| 亚洲午夜久久久久久久久电影院| 亚洲国产欧美一区| 国产伦精品一区二区三区视频孕妇 | 一区二区三区蜜桃网| 久久伊人免费视频| 老司机亚洲精品| 欧美成年人在线观看| 免费欧美在线| 牛牛精品成人免费视频| 猛男gaygay欧美视频| 久久中文字幕一区| 欧美第十八页| 亚洲欧洲一区二区三区| 99国产精品国产精品久久 | 欧美视频日韩视频| 国产日韩欧美日韩| 亚洲青涩在线| 亚欧成人精品| 亚洲国产精品悠悠久久琪琪| 欧美 日韩 国产 一区| 最新亚洲电影| 久久国产主播精品| 欧美性色aⅴ视频一区日韩精品| 国产精品久久久久久久久搜平片| 国产精品毛片| 99精品欧美一区二区三区| 性久久久久久久久| 亚洲第一网站免费视频| 午夜精品福利在线| 欧美成年人视频网站| 亚洲少妇最新在线视频| 美女视频网站黄色亚洲| 国产精品一区=区| 亚洲大胆视频| 欧美在线观看一区| 亚洲黄色在线| 久久久久久网| 国产女人精品视频| 99国产精品一区| 欧美亚洲尤物久久| 国产欧美日韩在线视频| av成人手机在线| 亚洲狠狠丁香婷婷综合久久久| 欧美一区二区三区免费视| 国产伦精品一区二区三区视频黑人| 亚洲影院一区| 欧美亚洲综合网| 在线观看亚洲精品| 亚洲精品久久久久中文字幕欢迎你 | 亚洲国产精品日韩| 欧美性片在线观看| 欧美亚洲一区| 久久在线免费| 99国产精品国产精品久久| 夜久久久久久| 国模精品一区二区三区色天香| 久久中文精品| 欧美日韩中文字幕在线| 久久精品国产成人| 欧美精品久久久久久久免费观看| 亚洲深夜av| 久久久99精品免费观看不卡| 国产精品夜夜嗨| 欧美国产高清| 国产综合色精品一区二区三区| 欧美顶级艳妇交换群宴| 国产精品午夜在线| 亚洲国产视频一区| 欧美在线免费观看视频| 99视频国产精品免费观看| 久久久www| 久久久噜噜噜| 国产午夜精品福利| 一区二区三区久久| 中日韩高清电影网| 欧美日韩精品一区视频 | 亚洲每日在线|