資料庫索引

2021-09-27 08:37:00 字數 1398 閱讀 7997

索引是一種資料結構(底層b+樹實現),我覺得索引就像是標籤或者目錄,能夠方便你快速找到你要找到的資訊。

從資料結構角度來分:b+樹索引;hash索引;fulltext索引

從物理角度來分:聚簇索引和非聚簇索引。

從邏輯角度來分:單列索引或者普通索引;唯一索引或者非唯一索引;主鍵索引;多列索引(組合索引);空間索引。

為什麼要有索引?(也就是索引的優點)

首先,一定會提高查詢效率(通過索引縮短檢索資料的時間,通過索引也可以減少表與表之間的關聯查詢時間);其次,如果給排序或者分組的字段增加索引,可以提公升排序和分組的效率;最後,建立唯一性索引可以保證資料庫中每一行資料的唯一性。

有優點就會有缺點:建了索引就需要維護,資料量越大,維護的成本也就越大。建立索引也需要時間,如果資料量很大,首先建索引就很耗費時間;索引的實現就是空間換時間,那麼就會造成磁碟空間的乙個占用。

建索引的原則

1.表的主鍵、外來鍵必須有索引;

2.資料量超過300的資料必須建索引

3.經常與其他表連線的表,應該在連線欄位上建索引;

4.經常出現在where子句中的字段應建索引;

5.在選擇性高的字段上建索引;

6.在小字段上建索引,對於大文字或者是超長欄位不應該建索引;

7.復合索引盡量用單字段索引代替。(如果復合索引包含的字段經常單獨出現在where子句中,則分解為多個單字段進行索引)

8.頻繁修改、刪除的字段不適合建索引。

9.刪除無用索引

10.索引列不能參與計算

11.盡量的擴充套件索引,盡量避免新建索引。

12.為需要經常排序、分組、聯合的字段建立索引

13.最左字首匹配原則。

索引是b+樹實現的,但是在innerdb和myisam中,b+樹的形態是不一樣的,在innodb中有兩種形態:1.主鍵,葉子節點中存放的是資料,不僅僅是索引欄位的資料,還有其他的資料;2.二級索引,它的葉子結點和普通b樹差不多,只是還存放了指向主鍵的資訊。所以innodb本身就是主索引。

myisam中b+樹的葉子結點上存放的不是資料本身,而是資料存放的位址。主索引和二級索引沒啥區別,只是主索引的key必須是唯一的。

innodb表資料在物理磁碟上是隨機分步的;myisam在物理磁碟上的空間分配是連續的。

如果innodb有大資料列,比如 varchar(300),這種比較多的話,那麼排序的時候用主鍵id排序會比較慢,因為id主鍵下面放著所有資料列,而myisam就不需要掃瞄資料列,要解決這個問題的話可以再建乙個和主鍵id一起的聯合索引;

myisam表索引在處理文字索引時更具優勢,而innodb表索引在其它型別上更具效率優勢。比如全文索引一般在char、varchar或text列上建立,myisam表支援而innodb表不支援,常見主要針對文字進行索引。同時mysql高併發需要事務場景時,只能使用innodb表。

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...