看完就知道什麼是資料庫索引

2021-10-09 14:03:20 字數 1631 閱讀 8280

索引在表的上建立。索引是一種資料結構,索引包含乙個表中列的值,並且這些值儲存在乙個資料結構中。

使用索引的全部意義就是通過縮小一張表中需要查詢的記錄/行的數目來加快搜尋的速度

索引的乙個主要目的就是加快檢索表中資料的方法,能協助資訊搜尋者盡快的找到符合限制條件的記錄id的輔助資料結構。索引儲存了指向表中某一行的指標。

如果沒有索引:select * from table1 where idcard="123456789",必須遍歷整個表,直到idcard等於123456789的這一行被找到為止;有了索引之後,即可在索引中查詢。由於索引是經過演算法優化過的,因而查詢次數要少的多。簡而言之,索引是用來定位的。

索引使用原則:表中的某一列或者某幾列在查詢過程中使用得非常頻繁,那就應按需在該列上建立索引。  

1.聚集索引(主鍵索引):在資料庫裡面,所有行數都會按照主鍵索引進行排序。

2.非聚集索引:

普通分類

(1) 唯一索引

作用:避免同乙個表中某資料列中的值重複

與主鍵索引的區別:主鍵索引只能有乙個,唯一索引可有多個

(2) 普通索引

作用:快速定位特定資料

注意:index 和 key 關鍵字都可以設定常規索引,但不要加太多普通索引,會影響資料的變更效率

(3) 全文索引

作用:快速定位特定資料

按索引列個數分類

(1) 單行索引:單資料列

(2) 復合索引:多資料列組成的復合索引。復合索引使用原則:最左原則,有a、b、c三個字段建立的聯合索引,如果a欄位在查詢時為空,那麼這個復合索引不生效;如果a欄位不為空,b、c不管為不為空,那麼復合索引都是生效的。

並不是,很多sql都不會使用到建立的索引。比如:

1. 模糊查詢以%開頭,如 like"%nanci"

2. 索引列進行表示式計算或者函式式操作

3. 索引列用了 != ,or, in(多個值)

備註:in裡面如果只有乙個值,例如:age in(12) 是等同於age=12的,會使用到索引。

4. 在where子句中進行null值判斷:age is null( is not null)

5.復合索引不滿足最左原則

資料庫索引並不是越多越好,心裡要有一把稱,適可而止,恰到好處。

1.索引會占用空間:表越大,索引佔的空間越大。

2.資料庫效能:主要是在表中新增、修改和刪除資料時,索引也會有相同的操作。建立在某列或多列的索引需要儲存該列最新的資料。

hash索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b-tree索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以hash 索引的查詢效率要遠高於 b-tree索引。

但是我們日常使用的都是:btree。

使用:btree而不使用hash。最重要的一點,我覺得是:hash索引在任何時候都不能避免表掃瞄。

推薦hash和btree對比的一篇文章:

內容純屬個人觀點。

爬山了這座山,才能看到山下的風景。

看完你就知道什麼是瞎忙與高效

時間是最公平的,每個人一天都是24小時,一年都是365天。但是,不同的人的產出卻是天差地別。人和人的差距為什麼這麼大?而且這種差距,並不是家庭背景 權利財富或天賦帶來的,僅僅是我們對時間的掌控。疲於奔命 vs 善於規劃 瞎忙族和高效人士的時間都安排得很滿,但是卻有本質的區別。瞎忙族是沒有目標和方向的...

什麼是資料庫索引

假設我們有乙個資料庫表 employee,這個表有三個字段 列 分別是 employee name employee age 和employee address。假設表employee 有上千行資料。現在假設我們要從這個表中查詢出所有名字是 jesus 的雇員資訊。我們決定使用下面的查詢語句 資料庫...

什麼是mysql的索引 什麼是資料庫索引

大家平時在開發過程中都避免不了使用資料庫索引,那麼你了解資料庫索引麼,接下來呢,我就簡單講一下什麼是資料庫索引。一 資料索引是幹什麼用的呢?資料庫索引其實就是為了使查詢資料效率快。二 資料庫索引有哪些呢?聚集索引 主鍵索引 在資料庫裡面,所有行數都會按照主鍵索引進行排序。非聚集索引 就是給普通字段加...