1. 程式人生 > >數據庫事務和索引

數據庫事務和索引

strong nbsp 全文索引 讀取 普通 並發 排序 插入 沒有

事務的性質:

  原子性:同一個事務中的所有操作要不然全部成功要不然全部失敗

  一致性:一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。

  隔離性:隔離性是當多個用戶並發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所幹擾,多個並發事務之間要相互隔離。

  持久性:持久性是指一個事務一旦被提交了,那麽對數據庫中的數據的改變就是永久性的

不考慮事務的隔離性會出現的問題:

  臟讀:臟讀是指在一個事務處理過程裏讀取了另一個未提交的事務中的數據。

  不可重復讀:不可重復讀是指在對於數據庫中的某個數據,一個事務範圍內多次查詢卻返回了不同的數據值,這是由於在查詢間隔,被另一個事務修改並提交了。

  虛度:例如事務T1對一個表中所有的行的某個數據項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行數據項,而這個數據項的數值還是為“1”並且提交給數據庫。而操作事務T1的用戶如果再查看剛剛修改的數據,會發現還有一行沒有修改,其實這行是從事務T2中添加的,就好像產生幻覺一樣,這就是發生了幻讀。

事務的隔離級別:

  Serializable (串行化):可避免臟讀、不可重復讀、幻讀的發生

  Repeatable read (可重復讀):可避免臟讀、不可重復讀的發生

  Read committed (讀已提交):可避免臟讀的發生

  Read uncommitted (讀未提交):最低級別,任何情況都無法保證

索引

  數據庫中索引的作用是用來加快查找速度,原理是將表中建立索引列的數據獨立出來用特殊的數據結構存儲,(如B-Tree,Hash),數據庫實現通常使用B樹和B+樹

  索引相當於字典的目錄,可以通過查找目錄來得到我們所需要的數據所在的位置,而不需要翻整本字典.

  使用索引需要註意的問題

     索引會帶來額外的開銷,額外的存儲空間,額外的創建時間,額外維護時間,所以要選擇適合的情況去建立索引

  索引的類型

    1. 普通索引:普通索引允許被索引的數據列包含重復的值。

    2. 唯一索引:被索引包含的數據列不允許有相同的值, 可以包含null

    3. 主鍵索引:主鍵創建的索引,唯一且不能為空,

    4. 全文索引(mysql):

    5. 聚集索引 : 該索引中鍵值的邏輯順序決定了表中相應行的物理順序。 (比如字典的按照拼音查詢 邏輯順序和物理順序一致),一個表中只能有一個聚集索引

    6. 非聚集索引 : 該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同。(比如字典中的按部首查詢 一個字可能在54頁有可能在554頁)(mysql中沒有)

  適合建立索引的字段:

    1. 經常搜索

    2. 經常排序

    3. 經常跟在Where語句後面

    4. 數據類型小

    5. 簡單數據類型

    6. 列中盡量避免null

數據庫事務和索引