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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            亚洲成人中文| 亚洲精品色婷婷福利天堂| 国产日韩欧美一区二区三区在线观看| 久久精品人人做人人综合| 一区二区高清在线观看| 亚洲黄一区二区三区| 国产一区自拍视频| 亚洲精品视频在线| 亚洲私人黄色宅男| 一区二区三欧美| 日韩亚洲精品视频| 亚洲日本激情| 一本久道久久久| 亚洲一区二区三区三| 亚洲欧美视频在线观看视频| 久久国产高清| 久久人人爽人人爽| 久久永久免费| 欧美高清自拍一区| 91久久精品网| 西西裸体人体做爰大胆久久久| 性亚洲最疯狂xxxx高清| 久久天天躁狠狠躁夜夜av| 美腿丝袜亚洲色图| 欧美日韩国产综合视频在线| 亚洲伊人观看| 欧美老女人xx| 美女尤物久久精品| 亚洲性感美女99在线| 亚洲一区二区三区在线看| 亚洲欧美国产一区二区三区| 欧美一区视频| 欧美激情中文字幕在线| 免费视频最近日韩| 欧美日本不卡高清| 国产欧美日韩综合精品二区| 亚洲二区三区四区| 欧美在线啊v| 99精品视频免费全部在线| 久久婷婷av| 韩国久久久久| 欧美一区二区三区视频免费播放| 欧美成人黑人xx视频免费观看| 亚洲欧美www| 欧美日韩精品伦理作品在线免费观看| 亚洲国产成人久久综合一区| 久久久久久久性| 夜夜精品视频一区二区| 美女视频黄免费的久久| 国外精品视频| 久久三级视频| 久久久成人精品| 黄色欧美日韩| 老色批av在线精品| 久久久中精品2020中文| 韩国一区二区在线观看| 久久精品色图| 欧美一区影院| 黑人一区二区三区四区五区| 久久精品亚洲国产奇米99| 亚洲欧美久久| 国产日韩专区| 久久综合999| 六月丁香综合| 亚洲精选一区二区| 日韩视频在线你懂得| 欧美日韩美女在线观看| 亚洲五月婷婷| 亚洲永久在线| 国产一区二区三区在线观看视频| 久久久五月天| 美女精品在线观看| 99国产精品国产精品毛片| 亚洲乱码国产乱码精品精98午夜| 欧美日韩精品免费| 欧美一区二区三区在| 久久久www| 一本色道久久88精品综合| 亚洲一区二区不卡免费| 国产一区二区三区在线观看精品 | 欧美日本一道本| 亚洲美女视频在线观看| 在线欧美福利| 国内精品久久久久久久果冻传媒 | 亚洲一区精品电影| 亚洲女与黑人做爰| 在线观看成人小视频| 亚洲啪啪91| 国产伦精品一区二区三区| 久久一综合视频| 欧美久久婷婷综合色| 欧美一级片一区| 美女尤物久久精品| 在线亚洲电影| 99热精品在线| 99国产精品视频免费观看| 欧美日韩一二三区| 久久国产精彩视频| 老司机凹凸av亚洲导航| 亚洲综合视频在线| 久久午夜av| 亚洲欧美一区二区视频| 久久深夜福利| 亚洲欧美视频一区二区三区| 久久综合五月| 久久久久九九九| 欧美日韩在线播放三区四区| 久久人人九九| 国产精品久久久久999| 欧美成人精品一区| 国产欧美日韩亚州综合| 亚洲美女91| 亚洲韩国精品一区| 国产精品久久影院| 免费久久99精品国产自| 久久一区二区精品| 午夜精品美女久久久久av福利| 久久免费高清| 欧美一区二区在线| 欧美日韩一区二| 亚洲第一精品夜夜躁人人爽| 国产精品稀缺呦系列在线| 亚洲精品视频在线观看免费| 尤物视频一区二区| 欧美制服丝袜第一页| 亚洲欧美中文在线视频| 欧美视频导航| 一区二区欧美激情| 99在线|亚洲一区二区| 欧美大片在线观看| 亚洲成人在线网站| 亚洲欧美福利一区二区| 亚洲美女视频| 免费成人高清视频| 欧美成人精品| 久久久精品一区二区三区| 99精品欧美一区二区蜜桃免费| 久久国产一二区| 欧美在线三级| 国产毛片精品国产一区二区三区| 在线一区二区三区四区五区| 一区二区三区欧美成人| 欧美日韩精品在线播放| 亚洲精选91| 亚洲性视频h| 国产精品美女www爽爽爽| 亚洲午夜电影在线观看| 午夜精品久久久久久久白皮肤| 一区二区三区欧美在线| 日韩午夜在线电影| 另类春色校园亚洲| 欧美.日韩.国产.一区.二区| 亚洲第一黄色| 欧美激情视频免费观看| 亚洲精品欧美日韩专区| 亚洲影院在线观看| 国产日韩欧美二区| 久久亚洲影音av资源网| 亚洲福利视频一区二区| 一区二区三区蜜桃网| 国产嫩草影院久久久久| 久久久国产午夜精品| 亚洲电影在线观看| 亚洲私人黄色宅男| 国产精品呻吟| 免费高清在线视频一区·| 日韩一级不卡| 久久亚洲国产成人| 一区二区三区国产| 欧美国产在线观看| 亚洲你懂的在线视频| 欧美国产日韩一区二区三区| 亚洲一区尤物| 亚洲国产美女| 国产精品天天摸av网| 老牛嫩草一区二区三区日本| 日韩视频二区| 久热爱精品视频线路一| 亚洲丝袜av一区| 亚洲电影视频在线| 国产精品乱码久久久久久| 久久久亚洲国产美女国产盗摄| 99精品福利视频| 欧美二区在线播放| 欧美一区在线直播| 日韩亚洲精品电影| 亚洲成色www久久网站| 国产精品美女主播| 欧美激情成人在线视频| 欧美一区亚洲| 亚洲一区二区黄| 亚洲精品视频二区| 欧美激情亚洲一区| 乱中年女人伦av一区二区| 亚洲自拍16p| 一区二区三区高清在线观看| 亚洲欧洲中文日韩久久av乱码| 国产午夜精品在线| 国产精品亚洲а∨天堂免在线| 欧美日韩精品是欧美日韩精品|