MySQL筆記二 索引

2021-08-21 17:07:03 字數 2868 閱讀 4088

mysql資料庫索引的資料結構基礎為b+樹。為表建立所以可以提高查詢的速度,但是寫入資料時效能會有所下降。

索引由資料庫表中的一列或多列資料組合而成,其作用是提供對錶中資料的查詢速度。索引可分為:普通索引、唯一性索引、全文索引、單列索引、多列索引和空間索引等。

索引是建立在標上的,是對資料庫表中的一列或多列的值進行排列的一種結構,可以提高查詢速度。通過所以,查詢資料時可以不必讀完資料的所有資訊,而只是查詢索引列。索引有兩種儲存型別,包括b樹索引和雜湊索引(用於不同的的引擎中)。

建立索引的主要原因是可以提高檢索資料的速度;對於有依賴關係的子表和父表之間的的聯合查詢時,可以提高查詢速度;使用分組和排序子句進行資料查詢時,同樣可以顯著節省查詢中分組和排序的時間。

缺點是建立和維護索引需要消耗時間和占用物理記憶體,每個索引都要占用一定的物理空間。耗費時間的數量隨資料量的增加而增加。增加、刪除和修改資料時需要動態維護索引,會造成資料的維護速度下降。

索引提高查詢速度的同時會影響記錄插入的速度。因為向有序表中插入記錄時,資料庫會按照索引進行排序,這樣就降低了插入記錄的速度。插入大量記錄時的速度影響更加明顯。這種情況下,最好的辦法是先刪除表中的索引然後插入資料。插入完成後,再建立索引。

普通索引

建立普通索引時,不附加任何限制條件。這類索引可以建立在任何資料型別中,其值是否唯一和非空由字段本身的完整性約束條件決定。建立索引後,查詢時可以通過索引進行查詢。

唯一性索引

使用unique引數可以設定索引為唯一性索引。在建立唯一性索引時,限制該索引的值必須是唯一的。通過唯一性索引可以更加快速的確定某條記錄。

全文索引

使用fulltext引數可以設定索引為全文索引(how)。全文索引只能建立在char/varchar或text型別的字段上。查詢資料量較大的字串型別的字段時,使用全文索引可以提高查詢速度。在預設情況下,全文索引的所搜執行方式不區分大小寫。但索引的列使用二進位制排序後可以執行區分大小寫的全文索引。僅部分引擎支援。

單列索引

在表中的單個欄位上建立索引。單列索引只根據該欄位進行索引。單列索引可以使普通索引,也可以是唯一性索引還可以是全文索引。只要保證該索引只對應乙個字段即可。

多列索引

多列索引是在表的多個欄位上建立乙個索引。該索引指向建立時對應的多個字段,可以通過這幾個字段進行查詢。但是只有查詢條件中使用了這些欄位中第乙個欄位時,索引才會被使用。如在id、name和***欄位上建立多列索引,只有在查詢條件中使用了id欄位時該索引才會被使用。

空間索引

使用spatial引數可以設定索引為空間索引。空間索引只能建立在空間資料型別上,可以提高系統獲取空間資料的速度。mysql中有多種空間資料型別,如geometry和point、linestring和polygon等。僅部分引擎支援。

為使索引的效率更高,在建立索引時必須考慮在哪些欄位上建立索引以及建立什麼型別的索引。

選擇唯一性索引

唯一性索引的值是唯一的。可以更快地通過該索引來確定記錄從而避免重名現象來提高查詢速度。

為經常需要排序、組合和聯合操作的字段建立索引

經常需要order by、group by、distinct和union等操作的字段,排序操作會浪費很多的時間。如果為其建立索引,可以有效地避免排序操作。

為常作為查詢條件的字段建立索引

如果某個字段經常用作查詢條件,那麼該字段的查詢速度會影響整個表的查詢速度。因此為這樣的字段建立索引可以提高整個表的查詢速度。

限制索引的數目

索引的數目不是越多越好,每個索引都要占用磁碟空間。索引越多,需要的磁碟空間越大。修改表時,對索引的重構和更新很麻煩。越多的索引,會使更新變得浪費時間。

盡量使用資料量少的索引

如果索引的值很長,那麼查詢的速度會受影響。如對char(100)型別的索引比char(10)的索引花費時間要多。

盡量使用字首來索引

如果索引欄位的值很長,最好使用值的字首來索引。如果只檢索欄位的前面的若干個字元,可以提高檢索速度。

刪除不在使用或者很少使用的索引

表中的資料被大量更新的時候,或者資料的使用方式被改變後,原有的一些索引可能不再需要。要定期找出這些索引並將它們刪除從而減少索引對更新操作的影響。

建立索引有三種方式:建立表的時候建立索引、在在已經存在的表中建立索引和使用alter table語句來建立索引。

建立表時可以直接建立索引,這種方式最簡單和方便。語法如下:

create table 表名(屬性名 資料型別 [完整性約束條件],

屬性名 資料型別 [完整性約束條件],

……屬性名 資料型別

[unique|fulltext|spatial] index|key

[別名] (屬性名1 [(長度)] [asc|desc])

其中,unique是可選引數,表示索引是唯一性索引;fulltext是可選引數,表示索引是全文索引;spatial是可選引數,表示索引是空間索引;index和key引數用來指定欄位為索引的,二者取一即可,作用相同;別名是可選引數,用來給建立的索引取新的名稱;「屬性1」引數指定索引對應的字段的名稱,該欄位必須是前面定義好的字段;長度是可選引數,指索引的長度,必須是字串型別才可以使用;asc和desc是可選引數,其中,asc引數表示公升序排列,desc表示將序排列。

語法如下:

create [unique|fulltext|spatial] index 索引名 on 表名 (屬性名 [(長度)] [asc|desc]);

此時需要保證表是已經存在的,如果不存在,需要先建立;屬性名字段也必須是前面已經定義好的字段。

在已存在的表上通過alter table語句直接為表上的乙個或多個字段建立索引。語法如下:

alter table 表名 add [unique|fulltext|spatial] index 索引名 (屬性名 [(長度)] [asc|desc]);

通過drop語句進行刪除,語法如下:

drop index 索引名 on 表名;

Mysql筆記(二)索引介紹

索引介紹 索引是什麼 官方介紹索引是幫助mysql高效獲取資料的資料結構。更通俗的說,資料庫索引好比是一本書前面的目 錄,能加快資料庫的查詢速度。索引的優勢和劣勢 優勢 劣勢 索引的分類 索引的使用 建立索引 create index index name on table column lengt...

mysql 索引 二 MySQL學習之索引(二)

高效能的索引策略 isolating the column 孤立列就是說,這一列不能在表達示中或在乙個函式裡面,如 mysql select actor id from actor where actor id 1 5 錯誤 再如 mysql select where to days current...

mysql索引 使用筆記 mysql索引筆記

mysql索引 一 索引的優缺點 優點 1.通過建立唯一索引,可以保證資料庫表中每一行的唯一性。2.可以大大加快查詢速度,這是建立索引的最主要原因 4.在使用分組和排序子句進行資料查詢時,也可以顯著減少查詢中分組和查詢的時間 缺點 1.建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也...