mysql 索引等 mysql索引

2021-10-20 22:33:10 字數 2282 閱讀 7582

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

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

例如:有一張person表,其中有2w條記錄,記錄著2w個人的資訊。有乙個phone的字段記錄每個人的**號碼,現在想要查詢出**號碼為***x的人的資訊。如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。如果有了索引,那麼會將該phone欄位,通過一定的方法進行儲存,好讓查詢該字段上的資訊時,能夠快速找到對應的資料,而不必在遍歷2w條資料了。其中mysql中的索引的儲存型別有兩種:btree、hash。 也就是用樹或者hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。

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

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

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

缺點: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、組合索引

在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合。下面舉例說明:

新增索引:alter table mytable add index name_city_age (name(10),city,age);建立這樣的組合索引,其實是相當於分別建立了下面三組組合索usernname,city,age、 usernname,city、 usernname。下面的幾個sql就會用到這個組合索引:

select * from mytable whree username="admin" and city="鄭州"

select * from mytable whree username="admin"

而下面幾個則不會用到:

select * from mytable whree age=20 and city="鄭州"   select * from mytable whree city="鄭州"

1.3、全文索引

1.4、空間索引

空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有四種,geometry、point、linestring、polygon。在建立空間索引時,使用spatial關鍵字。要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。具體細節看下面

mysql 索引 手冊 MySQL 索引

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

mysql非同步索引 MySQL索引

一 為什麼要使用索引 優化查詢,減少掃瞄的錶行數。打個比方,索引的作用就和查新華字典,字典的索引的作用的一樣的。二 索引的型別 1 索引是在儲存引擎中實現的,而不是在伺服器層中實現的。所以,每種儲存引擎的索引都不一定完全相同,並不是所有的儲存引擎都支援所有的索引型別。2 如果使用的是組合索引 即有多...

mysql 索引 鍵名 mysql 索引

3 索引型別 在建立索引時,可以規定索引能否包含重複值。如果不包含,則索引應該建立為primary key或unique索引。對於單列惟一性索引,這保證單列不包含重複的值。對於多列惟一性索引,保證多個值的組合不重複。primary key索引和unique索引非常類似。事實上,primary key...