二、innodb的索引模型
三、索引維護
本文介紹常見的索引資料模型 , innodb的索引模型 , 索引的維護
索引與約束不是一樣東西. 索引存在的目的是為了加快檢索速度
下面介紹幾種索引型別
主鍵索引 , 資料不可重複,且字段資料不可為空唯一索引 , 做了唯一約束的索引,字段資料可為空普通索引 , 普通索引可以有多個,且值可以重複,存在僅僅是為了優化而非對字段做限制
全文索引 , 用於在一篇文章中檢索資訊
聯合索引 , 使用and和where
拼接多個字段進行的查詢,這多個字段組合成了聯合索引
眾所周知,雜湊表是由鍵值對組成的資料結構,使用雜湊表作為索引模型, 優點在於插入資料速度很快,同時因為雜湊表是無序的,同時也造成了做區間查詢時速度很慢
因此,雜湊表模型適用於僅作等值查詢的情況
有序陣列作為資料模型時 , 在等值查詢和區間查詢的情況下效率很高,然而在做插入,特別是主鍵自增的情況下,插入速度極慢 (需要遍歷到表的最後一行插入資料)
因此有序陣列模型適合於靜態儲存引擎(無需做插入,僅做查詢的資料庫)
索引不僅僅是存在記憶體中的, 還需要寫入到磁碟做長期儲存
我們都知道,二叉樹的搜尋效率最高, 然而受限於每個結點只有兩個子結點, 因此二叉樹的層數就相應增加 , 當檢索所需的資料塊位於葉子結點時, 如果此時磁碟的讀寫速度又跟不上, 那麼使用二叉樹模型的資料庫檢索速度就會極慢;
此時若使用n叉樹來降低樹高 , 就能較好地解決這個問題 .
優點: n叉樹在讀寫方面的效能均較強,且可以配合磁碟使用
innodb才用b+樹索引模型,每個索引在innodb中對應著乙個b+樹 , 其中:
主鍵索引的葉子結點中存放著整行資料
非主鍵索引的葉子結點中存放著其主鍵索引
這就引出來乙個問題 :做查詢時,使用主鍵索引查詢還是非主鍵索引查詢?
盡量使用主鍵索引, 由於非主鍵索引的b+樹子結點中存放著其主鍵索引 , 因此使用非主鍵查詢,需要先檢索非主鍵索引b+樹,找到其對應的主鍵,再根據此索引檢索主鍵b+樹
索引維護中有乙個令人糾結的問題 ,建立主鍵索引時到底是使用資料唯一的業務字段還是新建乙個主鍵自增的字段?舉例來說,是使用身份證作為主鍵字段還是新增乙個自增字段作為主鍵?
先給出答案, 我們應該使用自增字段作為主鍵
這需要考慮到資料的位元組長度, 身份證作為主鍵, 資料將近20個位元組,而使用自增主鍵作為字段 , 資料僅4位元組. 由此得出主鍵的長度應該盡可能地小
MySQL索引(一)索引基礎
索引是資料庫系統裡面最重要的概念之一。一句話簡單來說,索引的出現其實是為了提高資料查詢的效率,就像書的目錄一樣。索引的出現是為了提高查詢效率,但是實現索引的方式卻有很多種,這裡就介紹三種常見 也比較簡單的資料結構,它們分別是雜湊表 有序陣列和搜尋樹。雜湊表雜湊表是一種以key value儲存資料的結...
mysql 索引 簡書 MySQL 基礎之索引
mysql 索引 索引索引用於快速查詢具有特定列值的行。如果沒有索引,mysql必須從第一行開始,然後讀取整個表以查詢相關行。表越大,成本越高。如果表中有相關 列的索引,mysql可以快速確定要在資料檔案中間尋找的位置,而無需檢視所有資料。這比按順序讀取每一行要快得多。類似於字典中的目錄,查詢字典內...
MySQL 基礎篇 之索引
一 索引的引入 索引定義 索引是由資料庫表中一列或者多列組合而成,其作用是提高對錶中資料的查詢速度。類似於圖書的目錄,方便快速定位,尋找指定的內容,如一本1000頁的書,如果沒有目錄,你想要知道指定的內容,必須要1頁1頁翻過去,是不是很浪費時間?二 索引的優缺點 優點 提高查詢資料的速度。缺點 建立...