資料庫技術知識點總結之三 索引相關內容

2021-10-07 22:53:59 字數 1972 閱讀 9656

接上篇《資料庫技術知識點總結之二——mybatis》

索引在底層的資料結構用的是b+樹,它的原理見資料結構篇。

注:參考位址

《和剛入門的菜鳥們聊聊–什麼是聚簇索引與非聚簇索引》

《mysql索引:對聚簇索引和非聚簇索引的認識》

《通俗易懂 索引、單列索引、復合索引、主鍵、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的區別與聯絡》

聚簇索引規定了乙個資料表的排序方式,乙個資料表只能有乙個聚簇索引,通常使用聚簇索引的是資料表的主鍵。

聚簇索引和資料行是存放在一起的,所以使用聚簇索引的查詢效率很高。同時由於聚簇索引已經進行了排序,所以範圍查詢的效率很高。但是聚簇索引插入刪除的代價可能會比較高,可能會引起頁**的情況(b+tree 的資料結構特性,因為 b+tree 的乙個節點的度通常是資料頁的大小,向乙個滿度的節點插入資料,就會導致分頁)。

非聚簇索引又稱二級索引,可以有多個,它也是乙個 b+tree 結構,它的葉節點指向的是行的key 欄位和主鍵值。所以通過非聚簇索引搜尋時,首先通過非聚簇索引獲取到行的主鍵值(先獲取到資料表的聚簇索引值),然後根據主鍵值獲取到資料行資訊,相當於比聚簇索引多了一倍的 io。

聚簇索引和非聚簇索引不是矛盾關係。

鍵設計4 原則

使用系統生成的主鍵

可選鍵有時可做主鍵

什麼時候要使用索引?

主鍵自動建立唯一索引;

高的選擇性和過濾性的字段,一般建議在查詢資料量 10% 以下再使用索引;

經常作為查詢條件的列要建立索引,比如 where 或者 order by 語句;

作為排序的列要建立索引;

查詢中與其他表關聯的字段,外來鍵關係建立索引;

高併發條件下傾向組合索引( 多個列組合構建的索引 );

用於聚合函式的列可以建立索引;例如使用了 max(column_1) 或者 count(column_1) 時的column_1就需要建立索引

什麼時候不要使用索引?

經常更新的字段不要建立索引;

資料唯一性差,有大量重複值的列不建立索引,比如性別只有 「m」 「f」,不建議建立索引;

表記錄太少不要建立索引;

索引失效的情況:

在索引列上使用is nullis not null操作:索引是不索引空值的,所以這樣的操作不能使用索引;

在乙個 select 語句中,索引只能使用一次,如果在 where 中使用了,那麼在 order by 中就不要用了。

模糊查詢:like 操作中,』%aaa%』不會使用索引,也就是索引會失效,但是『aaa%』』可以使用索引。

索引的列上使用表示式或者函式會使索引失效;

在查詢條件中使用 or 連線多個條件會導致索引失效;

資料型別的轉換:當查詢條件存在隱式轉換時,索引會失效。比如在資料庫裡 id 存的 number 型別,但是在查詢時,卻用了下面的形式:

索引的優化

最左字首,見前面的解析;

帶索引的模糊查詢優化,見前面的解析;

為檢索的條件構建全文索引,然後使用

使用短索引

java基礎技術知識點總結 JDBC

jdbc主要是 載入驅動 class.forname com.mysql.jdbc.driver 連線到指定資料庫,需要制定url username password,可以直接寫也可以用配置檔案等 connection conn drivermanager.getconnection jdbc my...

MySQL資料庫索引知識點總結

1.mysql資料庫索引都有哪些資料結構 b 和hash 2.聊下hash hash查詢是把key通過hash生成下標然後獲取對應的值,它的主要特點是快速精確查詢,但是不支援範圍查詢。如果要是做成索引,速度是很慢的,要全部掃瞄。3.hash表在那些場景比較適合 等值查詢的場景,就只有kv key,v...

資料庫知識點總結

mysql支援的索引型別 b tree索引 隔離級別 預設使用可重複讀 mvcc 多版本併發控制機制。鎖機制可以控制併發操作,但是其系統開銷較大,而mvcc可以在大多數情況下代替行級鎖,使用mvcc,能降低其系統開銷。人們一般把基於鎖的併發控制機制稱成為悲觀機制,而把mvcc機制稱為樂觀機制。這是因...