1. 程式人生 > 其它 >SQL server基礎知識問答

SQL server基礎知識問答

無論是日常工作還是在我們參加面試的時候,都會涉及到資料庫相關知識,可能部分人平常都會使用資料庫的一些操作,但對於一些理論或原理卻知道得不多,下面我就對一些常被問到或基礎卻重要的點,採用問答的方式做一些歸納:

Q:什麼是索引?

A:在ORM資料庫中,索引是一種與表有關的資料庫結構,它可以使對應於表的SQL語句執行得更快。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。索引其實是一種資料結構,能夠幫助我們快速的檢索資料庫中的資料。

Q:索引具體採用的哪種資料結構呢?

A:在SQL Server資料庫鍾,索引的儲存是以B+樹結構來儲存的,又稱索引樹,其節點型別包含索引節點、葉子節點。索引節點按照層級關係,有時又可以分為根節點和中間節點,其本質是一樣的,都只包含下一層節點的入口值和入口指標;葉子節點就不同了,它包含資料,這個資料可能是表中的真實資料行,也可能是索引列值和行書籤,也就是聚焦索引和非聚集索引。

注:B+ 樹是一種多路平衡查詢樹,所以它的節點是天然有序的(左子節點小於父節點、父節點小於右子節點),所以對於範圍查詢的時候不需要做全表掃描。

Q:什麼是聚集索引、非聚集索引?兩者又有什麼區別?

A:聚集索引:資料行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,因為一張表中的資料只能有一個物理順序,所以一張表只能有一個主鍵/聚集索引。

  非聚集索引:該索引中索引的邏輯順序與磁碟上行的物理儲存順序不同,一個表中可以擁有多個非聚集索引。

  區別:

  • 聚集索引查詢會更快 。因為主鍵索引樹的葉子節點直接就是我們要查詢的整行資料了。而非主鍵索引的葉子節點一般是主鍵的值,然後執行回表查詢具體資料。回表查詢可能多次也可能只查詢一次,覆蓋索引便只查詢一次。
  • 聚集索引一個表只能有一個,而非聚集索引一個表可以存在多個
  • 聚集索引儲存記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理儲存並不連續

Q:在建立聯合索引的時候,多個欄位之間順序是如何選擇的?

A:在建立多列索引時,我們根據業務需求,where子句中使用最頻繁的一列放在最左邊,因為索引查詢會遵循最左字首匹配的原則,即最左優先,在檢索資料時從聯合索引的最左邊開始匹配。所以當我們建立一個聯合索引的時候,如(key1,key2,key3),相當於建立了(key1)、(key1,key2)和(key1,key2,key3)三個索引,這就是最左匹配原則。

Q:什麼時候使用聚集索引或非聚集索引?

A:

動作描述使用聚集索引使用非聚集索引
列經常被分組排序
返回某範圍內的資料 不應
一個或極少不同值 不應 不應
小數目的不同值 不應
大數目的不同值 不應
頻繁更新的列 不應
外來鍵列
主鍵列
頻繁修改索引列 不應

Q:事務、鎖?

A:事務:保持邏輯資料一致性與可恢復性,必不可少的利器。如果不能都執行完成,那就回到原點,都不完成。

鎖:多使用者訪問同一資料庫資源時,對訪問的先後次序許可權管理的一種機制,沒有他事務或許將會一塌糊塗,不能保證資料的安全正確讀寫。

  鎖從資料庫系統的角度大致可以分為6種:

  • 共享鎖(S):還可以叫他讀鎖。可以併發讀取資料,但不能修改資料。也就是說當資料資源上存在共享鎖的時候,所有的事務都不能對這個資源進行修改,直到資料讀取完成,共享鎖釋放。
  • 排它鎖(X):還可以叫他獨佔鎖、寫鎖。就是如果你對資料資源進行增刪改操作時,不允許其它任何事務操作這塊資源,直到排它鎖被釋放,防止同時對同一資源進行多重操作。
  • 更新鎖(U):防止出現死鎖的鎖模式,兩個事務對一個數據資源進行先讀取在修改的情況下,使用共享鎖和排它鎖有時會出現死鎖現象,而使用更新鎖則可以避免死鎖的出現。資源的更新鎖一次只能分配給一個事務,如果需要對資源進行修改,更新鎖會變成排他鎖,否則變為共享鎖。
  • 意向鎖:SQL Server需要在層次結構中的底層資源上(如行,列)獲取共享鎖,排它鎖,更新鎖。例如表級放置了意向共享鎖,就表示事務要對錶的頁或行上使用共享鎖。在表的某一行上上放置意向鎖,可以防止其它事務獲取其它不相容的的鎖。意向鎖可以提高效能,因為資料引擎不需要檢測資源的每一列每一行,就能判斷是否可以獲取到該資源的相容鎖。意向鎖包括三種類型:意向共享鎖(IS),意向排他鎖(IX),意向排他共享鎖(SIX)。
  • 架構鎖:防止修改表結構時,併發訪問的鎖。
  • 大容量更新鎖:允許多個執行緒將大容量資料併發的插入到同一個表中,在載入的同時,不允許其它程序訪問該表。

死鎖:是資料庫效能的重量級殺手之一,而死鎖卻是不同事務之間搶佔資料資源造成的。相互等待對方釋放資源,造成資源讀寫擁擠堵塞的情況,就被稱為死鎖現象

概念
樂觀鎖 自己實現,通過版本號
悲觀鎖 共享鎖,多個事務,只能讀不能寫,加 lock in share mode
排它鎖 一個事務,只能寫,for update
行鎖 作用於資料行
表鎖 作於用表

Q:

A: