【MySql】MySql中的存儲引擎、索引、事務

   一、 存儲引擎

    MySql的存儲引擎是MySql底層對於文件的一種存取機制。存儲引擎的建立是基於表的。

    1.MyISAM

    一、存儲引擎

    MyISAM 是 MySQL 的默認存儲引擎。MyISAM 不支持事務、也不支持外鍵,支持全文索引。數據文件和索引文件放置在不同的目錄(非聚集索引),平均分佈 I/O,獲得更快的速度。MyISAM支持表鎖,表生成三個文件:

    .frm  存放表定義的基本信息

    .myi  存放索引

    .myd  存放數據

    2.InnoDB

    InnoDB 支持外鍵和事務,不支持全文索引,B+樹索引結構,將索引當作數據的一部分(聚集索引),支持行鎖。
    3.MEMORY

    MEMORY 存儲引擎在內存中創建表。每個 MEMORY 表只實際對應一個磁盤文件,格式是.frm。MEMORY 類型的表訪問非常得快,因爲它的數據是放在內存中的。適用於臨時文件的存儲,不支持TEXT字段(大文本字段)和BLOB字段(圖片類型),若有,則交給MyISAM處理。

    4.ARCHIVE

    ARCHIVE是歸檔存儲引擎,以1:10的比例先進行壓縮再進行處理,適用於數據量大、查詢較少的文件,比如日誌文件。ARCHIVE存儲引擎僅支持插入和查找,刪除和修改代價太大。

    全文索引和普通索引的區別:

    兩種索引的功能和結構都是不同的。
    普通索引的結構主要以B+樹和哈希索引爲主,用於實現對字段中數據的精確查找,比如查找某個字段值等於給定值的記錄,A=10這種查詢,因此適合數值型字段和短文本字段。
    全文索引是用於檢索字段中是否包含或不包含指定的關鍵字,有點像搜索引擎的功能,其內部的索引結構採用的是與搜索引擎相同的倒排索引結構,其原理是對字段中的文本進行分詞,然後爲每一個出現的單詞記錄一個索引項,這個索引項中保存了所有出現過該單詞的記錄的信息,也就是說在索引中找到這個單詞後,就知道哪些記錄的字段中包含這個單詞了。因此適合用大文本字段的查找。
    大字段之所以不適合做普通索引,最主要的原因是普通索引對檢索條件只能進行精確匹配,而大字段中的文本內容很多,通常也不會在這種字段上執行精確的文本匹配查詢,而更多的是基於關鍵字的全文檢索查詢,例如你查一篇文章信息,你會只輸入一些關鍵字,而不是把整篇文章輸入查詢(如果有整篇文章也就不用查詢了)。而全文索引正是適合這種查詢需求。

    二、索引   

    不同存儲引擎中的索引

    1.MyISAM

    MyISAM底層使用的是B+樹索引,它是一種多路樹、排序樹。B+樹支持兩種查詢方式,一種是通過分支查找,另一種是葉子結點順序遍歷。MyISAM中的索引是一種非聚集索引結構,它的數據和索引是分離開來的,它的葉子結點存放數據地址(唯一標識),分支結點存放區間。

    主索引:索引值不能重複(一般爲主鍵)

    輔助索引:索引值可以重複

    2.InnoDB

    InnoDB的底層也使用的是B+樹索引,不過InnoDB中的索引是一種聚集索引。它將索引當作數據的一部分,並且它的葉子節點中存放的是真實的數據。

    系統建立索引規則:(1)主鍵;(2)唯一鍵;(3)添加隱藏字段,6個字節長,只能系統操作。autoincreament,可自增長類型,系統自動添加。

    主索引:存放數據(鍵不可重複)

    輔助索引:不存放數據,存放主索引,通過輔助索引查找到主索引,通過主索引查找數據。  

索引的建立是基於字段的。

    索引的分類基於字段屬性。

    1.普通索引,建立方法:

    (1)create index

    (2)alter add index

    (3)create table(index)

    2.主鍵索引

    3.唯一索引

    4.全文索引

    5.組合索引:多個字段共同構成索引值,最左前綴原則。

    三、事務

    事務是一組特定SQL語句的集合。事務有四大特性:1.A 原子性,要麼全部執行,要麼不執行;2.C 一致性,完整性約束;3. I 隔離性,消除事務間影響;4.D 持久性,永久存儲。

     沒有隔離性的事務會出現的幾種情況:1.髒讀,事務讀取其他事務未提交的結果;2.不可重複讀,事務讀取其他事務不同階段的結果,一般由update引起;3.幻讀,事務讀取其他事務不同階段的結果,一般由insert/delete引起。

    事務的隔離級別:1.未提交讀,會出現髒讀、不可重複讀、幻讀;2.已提交讀,會出現不可重複讀、幻讀;3.可重複讀,會出現幻讀;4.可串行化。

    解決髒讀:事務未提交對其他事務不可見。

    解決不可重複度讀:一個事務修改時對其他事務透明。

    解決幻讀:間歇鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章