索引相關知識

2021-09-20 12:40:24 字數 2071 閱讀 5787

1.什麼是索引

索引相當於目錄,可以快速查詢和定位。索引包含對資料表裡所有記錄的引用指標。

2.索引優缺點

優點:索引可以加快檢索速度,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

缺點:索引需要額外的維護成本;因為索引檔案是單獨存在的檔案,對資料的增加,修改,刪除,都會產生額外的對索引檔案的操作,這些操作需要消耗額外的io,會降低增/改/刪的執行效率。

3.建立索引的三種方式

(1) 在執行create table 時建立乙個索引

(2)第二種方式:使用alter table命令去增加索引:alter table用來建立普通索引、unique索引或primary key索引。

第三種方式:使用create index命令建立

create index可對表增加普通索引或unique索引。(但是,不能建立primary key索引)

4.索引的基本原理

索引用來快速地尋找那些具有特定值的記錄。如果沒有索引,一般來說執行查詢時遍歷整張表。

索引的原理很簡單,就是把無序的資料變成有序的查詢

1、把建立了索引的列的內容進行排序

2、對排序結果生成倒排表

3、在倒排表內容上拼上資料位址鏈

4、在查詢的時候,先拿到倒排表內容,再取出資料位址鏈,從而拿到具體資料

5.索引的資料結構

mysql通過儲存引擎取資料,基本上90%的人用的就是innodb了,按照實現方式分,innodb的索引型別目前只有兩種:btree(b樹)索引和hash索引。b樹索引是mysql資料庫中使用最頻繁的索引型別,基本所有儲存引擎都支援btree索引。通常我們說的索引不出意外指的就是(b樹)索引(實際是用b+樹實現的,因為在檢視表索引時,mysql一律列印btree,所以簡稱為b樹索引)

(1) b樹索引

查詢方式:

主鍵索引區:pi(關聯儲存的時資料的位址)按主鍵查詢,

普通索引區:si(關聯的id的位址,然後再到達上面的位址)。所以按主鍵查詢,速度最快

b+tree性質:

1)n棵子tree的節點包含n個關鍵字,不用來儲存資料而是儲存資料的索引。

2)所有的葉子結點中包含了全部關鍵字的資訊,及指向含這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。

3)所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。

4)b+ 樹中,資料物件的插入和刪除僅在葉節點上進行。

5)b+樹有2個頭指標,乙個是樹的根節點,乙個是最小關鍵碼的葉節點。

6.建立索引原則

索引雖好,但也不是無限制的使用,最好符合一下幾個原則:

1)最左字首匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

2)較頻繁作為查詢條件的字段才去建立索引

3)更新頻繁欄位不適合建立索引

4)若是不能有效區分資料的列不適合做索引列(如性別,男女未知,最多也就三種,區分度實在太低)

5)盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可。

6)定義有外來鍵的資料列一定要建立索引。

7)對於那些查詢中很少涉及的列,重複值比較多的列不要建立索引。

8)對於定義為text、image和bit的資料型別的列不要建立索引。

7.百萬級資料怎麼刪除

1、所以我們想要刪除百萬資料的時候可以先刪除索引(此時大概耗時三分多鐘)

2、然後刪除其中無用資料(此過程需要不到兩分鐘)

3、刪除完成後重新建立索引(此時資料較少了)建立索引也非常快,約十分鐘左右。

4、與之前的直接刪除絕對是要快速很多,更別說萬一刪除中斷,一切刪除會回滾。那更是坑了。

資料庫索引相關知識

查詢條件欄位和排序字段,新增聯合索引,查詢條件欄位在聯合索引的前面 整數型別比字元型別處理開銷更小 盡量避免null,應該指定列為 not null,使用乙個特殊的值 0,或者空值 來代替null 含有null的列很難進行查詢優化,建立索引的原則 1.對於查詢中很少涉及的列或者重複值比較多的列,不要...

關於索引節點inode的相關知識

一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組...

MySQL索引的相關知識點

mysql 索引是一種資料結構 查詢效率獲得提高 myisam b 樹資料和索引分離 由三個檔案組成 frm 存放建立的表的基礎資訊 myi 索引 myd 資料 資料儲存,隨意儲存,離散程度大,即非聚集索引 即myisam都是非聚集索引 innodb b 樹資料和索引結合,把索引當成資料的一部分 1...