MySQL索引概念及七種索引類型分享介紹
1 索引的概念
索引(在MySQL中也叫做“鍵(key)”)是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu),這也是索引最基本的功能。
索引對于良好的性能非常關(guān)鍵。數(shù)據(jù)量越大時,索引對性能的影響也越重要,好的索引可以將查詢性能提高幾個數(shù)量級。在數(shù)據(jù)量較小且負(fù)載較低時,不恰當(dāng)?shù)乃饕龑π阅艿挠绊懣赡苓€不明顯,但是在數(shù)據(jù)量逐漸增大時,糟糕的索引會使MySQL的性能急劇的下降。
索引優(yōu)化是查詢性能優(yōu)化最有效的手段。
如果想要在一本書中找到某個特定主題,一般會先看書的目錄,找到對應(yīng)的頁碼,然后直接翻到對應(yīng)的頁碼即可查看。在MySQL中,存儲引擎用類似的方法使用索引,首先在索引中找到對應(yīng)的值,然后根據(jù)匹配的索引記錄找到對應(yīng)的數(shù)據(jù)行。簡單的說,數(shù)據(jù)庫索引類似于書前面的目錄,能加快數(shù)據(jù)庫的查詢速度。
如下查詢:
select name from user where user_id = 5
如果user_id列上建有索引,則MySQL將使用該索引找到user_id 為 5的行,即MySQL現(xiàn)在索引上按值進(jìn)行查找,然后返回包含該值的數(shù)據(jù)行。
索引可以一個或多個列的值,如果索引包含多個列,那么列的順序也很重要,因?yàn)镸ySQL只能高效地使用最左前綴列。
2 索引的類型
按照功能邏輯區(qū)分,MySQL目前主要有以下索引類型:
主鍵索引 :
- 數(shù)據(jù)列不允許重復(fù),不允許為NULL,一個表只能有一個主鍵。
ALTER TABLE table_name ADD PRIMARY KEY (column);
普通索引:
- MySQL中基本索引類型,沒有什么限制,允許在定義索引的列中插入重復(fù)值和NULL值。一個表允許多個列創(chuàng)建普通索引。
ALTER TABLE table_name ADD INDEX index_name (column);
唯一索引:
- 索引列中的值必須是唯一的,但是允許NULL值。建立唯一索引的目的大部分時候都是為了該屬性列的數(shù)據(jù)的唯一性,而不是為了查詢效率。一個表允許多個列創(chuàng)建唯一索引。
ALTER TABLE table_name ADD UNIQUE (column);
全文索引:
- 主要是為了快速檢索大文本數(shù)據(jù)中的關(guān)鍵字的信息。字段長度比較大時,如果創(chuàng)建普通索引,在進(jìn)行l(wèi)ike模糊查詢時效率比較低,這時可以創(chuàng)建全文索引,基于倒排索引,類似于搜索引擎。MyISAM存儲引擎支持全文索引,InnoDB 存儲引擎在 MySQL 5.6.4 版本中也開始支持全文索引。
ALTER TABLE table_name ADD FULLTEXT (column);
前綴索引:
- 在文本類型如BLOB、TEXT或者很長的VARCHAR列上創(chuàng)建索引時,可以使用前綴索引,數(shù)據(jù)量相比普通索引更小,可以指定索引列的長度,但是數(shù)值類型不能指定。
ALTER TABLE table_name ADD KEY(column_name(prefix_length));
組合索引:
- 指多個字段上創(chuàng)建的索引,只有在查詢條件中使用了創(chuàng)建索引時的第一個字段,索引才會被使用。使用組合索引時遵循最左前綴原則。
- 主鍵索引、普通索引、唯一索引等都可以使用多個字段形成組合索引。例如,
ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 );
空間索引 :
- MySQL在5.7之后的版本支持了空間索引,而且支持OpenGIS幾何數(shù)據(jù)模型。MySQL在空間索引這方面遵循OpenGIS幾何數(shù)據(jù)模型規(guī)則。
到此這篇關(guān)于MySQL索引概念及七種索引類型分享介紹的文章就介紹到這了,更多相關(guān)MySQL索引 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)遷移使用MySQLdump命令
今天小編就為大家分享一篇關(guān)于MySQL數(shù)據(jù)遷移使用MySQLdump命令,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Windows Server 2003 下配置 MySQL 集群(Cluster)教程
這篇文章主要介紹了Windows Server 2003 下配置 MySQL 集群(Cluster)教程,本文先是講解了原理知識,然后給出詳細(xì)配置步驟和操作方法,需要的朋友可以參考下2015-06-06詳解如何用SQL取出字段內(nèi)是json的數(shù)據(jù)
數(shù)據(jù)庫中會遇到字段里面存的JSON結(jié)果的數(shù)據(jù),那么如果我們想直接取到JSON里的值該怎么辦呢?其實(shí)SQL自帶的函數(shù)就可解決本文就詳細(xì)的給大家介紹了如何用SQL取出字段內(nèi)是json的數(shù)據(jù),需要的朋友可以參考下2023-10-10MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié)(推薦)
MYSQL數(shù)據(jù)表損壞的原因分析和修復(fù)方法小結(jié),碰到的朋友可以參考,下面整理一些比較全,希望對大家有所幫助。2011-01-01mysql優(yōu)化之query_cache_limit參數(shù)說明
query_cache_limit指定單個查詢能夠使用的緩沖區(qū)大小,缺省為1M,一般不需要優(yōu)化2021-07-07mysql8創(chuàng)建、刪除用戶以及授權(quán)、消權(quán)操作詳解
上網(wǎng)找過資料說要進(jìn)入mysql數(shù)據(jù)庫在進(jìn)行這些操作,所以下面這篇文章主要給大家介紹了關(guān)于mysql8創(chuàng)建、刪除用戶以及授權(quán)、消權(quán)操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03