目錄
索引:類似于目錄功能
聚簇索引:
非聚簇索引:
資料庫操作中的索引型別:
事務:一個或多個sql組合
事務特性:
事務操作流程:
mvcc:多版本并發控制
索引:類似于目錄功能
原理:
給一張表創建一個索引,相當于創建一個索引表
索引不適用于所有欄位,索引不是越多越好會影響插入和洗掉效率
應用場景:
- 資料量大,經常用于查詢依據的欄位
- 欄位修改頻率較低的欄位
- 索引過多會占據額外磁盤空間
索引如何提高查詢效率?
索引采用特殊的資料結構提供效率(B+樹)
B+樹與B樹區別:
- B樹:多叉樹;B+樹:也是一個多叉樹,多叉樹可以降低樹高度提高查詢效率
- B樹的索引與資料存盤在一個節點中,而B+樹索引與資料分離存盤,每一個節點占據磁盤空間小,這樣一次性可以從磁盤中讀取更多索引資訊,加快索引效率
- B+樹資料順序存盤,在連續查詢或范圍查詢時可以連續IO取出資料,效率較高
聚簇索引:
以主鍵作為主索引,資料節點在磁盤中順序存盤,其他的索引作為輔助索引,其中輔助索引保存的是主鍵索引的資料,最侄訓是依靠主鍵索引進行查詢
非聚簇索引:
主鍵索引與普通索引區別不大,都是最終索引項中存放磁盤中的存放地址(指標),資料節點在磁盤中并非順序存盤
適用場景:
聚簇索引:索引與資料都是順序存盤,中間插入/洗掉需要調整索引的資料結構,效率較低,但由于資料順序存盤,在連續/范圍查詢時效率較高
非聚簇索引:中間插入資料,只需要將資料存盤在磁盤新的位置,中間調整索引資訊即可,效率高,但索引與資料存盤順序不一致,導致在連續/范圍查詢時類似于單個查詢,效率較低
大多數情況都是使用自增主鍵作為聚簇索引,這樣的話資料與索引總是在最后添加,而不涉及中間插入的調整1
資料庫操作中的索引型別:
- 主鍵索引:一個欄位被設定為主鍵,默認會為主鍵欄位創建索引
- 唯一索引:一個欄位被設定了唯一約束,默認會為該欄位創建索引
- 外鍵索引:一個欄位被設定為外鍵,默認會為外鍵欄位創建索引
- 普通索引:并非默認創建的索引,自定義創建
創建索引:create index idx_name on tbname(fields_name);
洗掉索引:drop index idx_name on tbname;
查看索引:show index from tbname\G;
事務:一個或多個sql組合
事務特性:
- 原子性:一次完成
- 一致性:事務前后,資料完整性要符合預設規則,依賴原子性
- 隔離性:允許多個事務并發執行,不會因為交叉執行導致資料不一致
- 持久性:事務提交之后,對資料的修改是永久的
事務操作流程:
begin(開啟事務) rollback(回滾) commit(提交)
若并發情況下無隔離性保護機制,則會導致:
- 臟寫:事務A進行資料修改,在事務提交之前被其他事務覆寫
- 臟讀:一個事務中讀取到的資料是其他事務中未提交的資料(解決方法:讀已提交)
- 不可重復讀:一個事務在不同階段從資料庫中讀到的資料不一致(修改同一條資料導致,可加鎖解決)
- 幻讀:一個事務在不同時間段讀取到的資料條數不一致(插入/洗掉不同資料導致,不可避免)
mvcc:多版本并發控制
- 給每個事務分配一個事務id
- 在事務中對資料進行操作時,都臨時拷貝一份資料進行操作
- 在本次事務對資料再次進行訪問時所訪問的均為臨時拷貝(對臨時拷貝進行操作,讀操作時不阻塞寫,寫操作也不會阻塞讀)
- 事務提交時將事務操作持久化
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/290350.html
標籤:其他
上一篇:需要去復習以及要去學會的
