文章目錄
- 1 索引的概念
- 2 索引的型別
1 索引的概念
索引(在MySQL中也叫做“鍵(key)”)是存盤引擎用于快速找到記錄的一種資料結構,這也是索引最基本的功能,
索引對于良好的性能非常關鍵,資料量越大時,索引對性能的影響也越重要,好的索引可以將查詢性能提高幾個數量級,在資料量較小且負載較低時,不恰當的索引對性能的影響可能還不明顯,但是在資料量逐漸增大時,糟糕的索引會使MySQL的性能急劇的下降,
索引優化是查詢性能優化最有效的手段,
如果想要在一本書中找到某個特定主題,一般會先看書的目錄,找到對應的頁碼,然后直接翻到對應的頁碼即可查看,在MySQL中,存盤引擎用類似的方法使用索引,首先在索引中找到對應的值,然后根據匹配的索引記錄找到對應的資料行,簡單的說,資料庫索引類似于書前面的目錄,能加快資料庫的查詢速度,
如下查詢:
select name from user where user_id = 5
如果user_id列上建有索引,則MySQL將使用該索引找到user_id 為 5的行,即MySQL現在索引上按值進行查找,然后回傳包含該值的資料行,
索引可以一個或多個列的值,如果索引包含多個列,那么列的順序也很重要,因為MySQL只能高效地使用最左前綴列,
2 索引的型別
按照功能邏輯區分,MySQL目前主要有以下索引型別:
- 主鍵索引
- 資料列不允許重復,不允許為NULL,一個表只能有一個主鍵,
ALTER TABLE table_name ADD PRIMARY KEY (column);
- 普通索引
- MySQL中基本索引型別,沒有什么限制,允許在定義索引的列中插入重復值和NULL值,一個表允許多個列創建普通索引,
ALTER TABLE table_name ADD INDEX index_name (column);
- 唯一索引
- 索引列中的值必須是唯一的,但是允許NULL值,建立唯一索引的目的大部分時候都是為了該屬性列的資料的唯一性,而不是為了查詢效率,一個表允許多個列創建唯一索引,
ALTER TABLE table_name ADD UNIQUE (column);
- 全文索引
- 主要是為了快速檢索大文本資料中的關鍵字的資訊,欄位長度比較大時,如果創建普通索引,在進行like模糊查詢時效率比較低,這時可以創建全文索引,基于倒排索引,類似于搜索引擎,MyISAM存盤引擎支持全文索引,InnoDB 存盤引擎在 MySQL 5.6.4 版本中也開始支持全文索引,
ALTER TABLE table_name ADD FULLTEXT (column);
- 前綴索引
- 在文本型別如BLOB、TEXT或者很長的VARCHAR列上創建索引時,可以使用前綴索引,資料量相比普通索引更小,可以指定索引列的長度,但是數值型別不能指定,
ALTER TABLE table_name ADD KEY(column_name(prefix_length));
- 組合索引
- 指多個欄位上創建的索引,只有在查詢條件中使用了創建索引時的第一個欄位,索引才會被使用,使用組合索引時遵循最左前綴原則,
- 主鍵索引、普通索引、唯一索引等都可以使用多個欄位形成組合索引,例如,
ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 );
- 空間索引
- MySQL在5.7之后的版本支持了空間索引,而且支持OpenGIS幾何資料模型,MySQL在空間索引這方面遵循OpenGIS幾何資料模型規則,
參考資料:
- 《 MySQL 技術內幕: InnoDB 存盤引擎》
- 《高性能 MySQL》
如有需要交流,或者文章有誤,請直接留言,另外希望點贊、收藏、關注,我將不間斷更新各種Java學習博客!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/290509.html
標籤:其他
下一篇:cgb2106-day02
