MySQL中的索引(超級詳細)

2021-08-19 05:41:07 字數 1960 閱讀 4443

一、什麼是索引?為什麼要建立索引?

索引用於快速找出在某個列中有一特定值的行,不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多,如果表中查詢的列有乙個索引,mysql能夠快速到達乙個位置去搜尋資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。

例如:有一張person表,其中有2w條記錄,記錄著2w個人的資訊。有乙個phone的字段記錄每個人的**號碼,現在想要查詢出**號碼為***x的人的資訊。

如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。

如果有了索引,那麼會將該phone欄位,通過一定的方法進行儲存,好讓查詢該字段上的資訊時,能夠快速找到對應的資料,而不必在遍歷2w條資料了。其中mysql中的索引的儲存型別有兩種:btree、hash。 也就是用樹或者hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。

二、mysql中索引的優點和缺點和使用原則

優點:2、所有的mysql列型別(字段型別)都可以被索引,也就是可以給任意字段設定索引

3、大大加快資料的查詢速度

缺點:1、建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加

2、索引也需要佔空間,我們知道資料表中的資料也會有最大上線設定的,如果我們有大量的索引,索引檔案可能會比資料檔案更快達到上線值

3、當對表中的資料進行增加、刪除、修改時,索引也需要動態的維護,降低了資料的維護速度。

使用原則:

通過上面說的優點和缺點,我們應該可以知道,並不是每個字段度設定索引就好,也不是索引越多越好,而是需要自己合理的使用。

1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該建立索引,

2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。

3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在乙個欄位上不同值較多可是建立索引。

上面說的只是很片面的一些東西,索引肯定還有很多別的優點或者缺點,還有使用原則,先基本上理解索引,然後等以後真正用到了,就會慢慢知道別的作用。注意,學習這張,很重要的一點就是必須先得知道索引是什麼,索引是幹嘛的,有什麼作用,為什麼要索引等等,如果不知道,就重複往上面看看寫的文字,好好理解一下。乙個表中很夠建立多個索引,這些索引度會被存放到乙個索引檔案中(專門存放索引的地方)

三、索引的分類

注意:索引是在儲存引擎中實現的,也就是說不同的儲存引擎,會使用不同的索引

myisam和innodb儲存引擎:只支援btree索引, 也就是說預設使用btree,不能夠更換

memory/heap儲存引擎:支援hash和btree索引

1、索引我們分為四類來講 單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引、

1.1、單列索引:乙個索引只包含單個列,但乙個表中可以有多個單列索引。 這裡不要搞混淆了。

1.1.1、普通索引:

mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。

1.1.2、唯一索引:

索引列中的值必須是唯一的,但是允許為空值,

1.1.3、主鍵索引:

是一種特殊的唯一索引,不允許有空值。

1.2、組合索引

在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合。這個如果還不明白,等後面舉例講解時在細說 

1.3、全文索引

1.4、空間索引

空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有四種,geometry、point、linestring、polygon。

在建立空間索引時,使用spatial關鍵字。

要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。具體細節看下面   

Docker安裝mysql超級詳細教程

建立mysql使用者 adduser mysql gpasswd a mysql docker 將mysql使用者加入docker使用者組 設定mysql使用者密碼 passwd mysql docker pull mysql 5.7.20 建立配置目錄 mysql使用者 su mysql 切換到m...

mysql索引詳細介紹簡書 Mysql索引介紹

資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。為表設...

Mysql索引的使用 詳細講解

1.索引的簡介 索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可以提高資料庫中特定資料的查詢速度。2.索引的含義和特點 索引是乙個單獨的 儲存再磁碟上的資料庫結構,它們包含著對資料表裡所有記錄的引用指標。2.1索引的儲存引擎 索引是在儲存引擎中實現的,因此,每種儲存引擎的索引都不一定完...