SQLSERVER書籤尋找的通俗理解

來源:互聯網
上載者:User

今晚在網上又看了一下書籤尋找

使用非叢集索引使用的是書籤尋找bookmark lookup

叢集索引不使用書籤尋找

我的理解:

叢集索引:把書裡面的內容放到書籤裡面,指定了叢集索引表列的所有內容(整行記錄)先放到書籤裡面

查詢:當查詢的時候根據書籤目錄,直接尋找書籤,因為內容直接存放在書籤裡面,所以查詢速度很快

修改資料:但是如果要修改資料,那麼,資料庫先找到書籤,然後修改書籤裡面的內容,再根據書籤裡的內容找到書本的內容,然後修改書本裡的內容(即要修改兩次)

因為書本裡的內容也存放在書籤裡面

非叢集索引:書裡面的內容不放到書籤裡面,只放指標

查詢:資料庫先找到書籤,再根據書籤裡的內容找到書本裡的內容,所以比叢集索引慢,但是因為跟叢集索引一樣加了書籤,所以比沒有加索引的表查詢快

修改資料:資料庫先找到書籤,再根據書籤裡的內容找到書本的內容,然後修改書本裡的內容,因為書籤裡不存放書本裡的內容,所以修改速度比叢集索引快

 

發現叢集索引還有一個好處:就是比起非叢集索引,阻塞幾率比非叢集索引少

比如:我有兩張表:EmployeeA表和EmployeeB表 ,兩張表都有兩列是EmployeeID 和Name。

EmployeeA表建立叢集索引在EmployeeID 上 ,EmployeeB表建立非叢集索引在EmployeeID上!!!!!!!!!!!!!!!!!

假如兩張表都有3條記錄,資料都是一樣的

EmployeeID    Name

     1                小明

     2                小方

     3                小青

 

現在當我在一個新會話裡(會話一)update EmployeeB表

begin tran

update EmployeeB表 set Name='小華'  where EmployeeID=2

這個sql不提交

然後在另一個會話裡(會話二)select EmployeeB表裡的內容

begin tran

select * from  EmployeeB表 where EmployeeID=3

這時候查詢EmployeeB表的那個會話二就會被阻塞,因為他要等會話一提交事務才能繼續,因為會話一在EmployeeID=2的那條記錄上

加上了 “獨佔鎖定”,所以會話二不能繼續往下尋找。只要會話一提交事務,會話二就能尋找EmployeeID=3的那條記錄並顯示出來

而叢集索引就不會有這個問題,為什麽呢?

之前講過:

叢集索引:把書裡面的內容放到書籤裡面,指定了叢集索引表列的所有內容(整行記錄)先放到書籤裡面

非叢集索引:書裡面的內容不放到書籤裡面,只放指標

如果是叢集索引的話,要尋找EmployeeID=3的那條記錄的內容,只是要從書籤裡把內容讀取出來就可以了,不用到資料頁裡去讀資料

因為update語句需要到資料頁裡去讀資料,所以大家互相不影響,但是,非叢集索引需要到書本裡(資料頁)裡去讀取內容(資料)

所以大家就會互相阻塞了,因為會話一鎖定了EmployeeID=2那條記錄,如果不提交的話,會話二無辦法讀取內容並顯示出來

 

以上是個人的通俗理解,如有錯誤,希望大家指正o(∩_∩)o

 準備訓教了,明天上班o(∩_∩)o

 

後記,今天在看了Microsoft SQLSERVER企業級平台管理實踐中的 P294 頁,這頁裡面講述了一個insert動作要申請的鎖

重點是最後一個句話:唯一不同的是heap結構上還得申請一個RID鎖。因為真正的資料不是放在索引上,而是放在heap上

這句話更加論證了我的觀點:

叢集索引:把書裡面的內容放到書籤裡面,指定了叢集索引表列的所有內容(整行記錄)先放到書籤裡面

非叢集索引:書裡面的內容不放到書籤裡面,只放指標

 

因為書中的例子用一個叢集索引表跟一個非叢集索引表做插入操作,比較了非叢集索引跟非叢集索引做插入操作要申請的鎖

有興趣的朋友可以看一下這本書!!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.