一、索引的定義
定義:索引(index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),提取句子主干,就可以得到索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。
二、索引的分類
在一個(gè)表中,主鍵索引只能有一個(gè),唯一索引可以有多個(gè)
- 主鍵索引(PRIMARY KEY):唯一標(biāo)識,主鍵不可重復(fù),有且只有一個(gè)。
- 唯一索引(UNIQUE KEY):避免重復(fù)的列出現(xiàn),唯一索引可以重復(fù),多個(gè)列都可以標(biāo)識為唯一索引。
- 常規(guī)索引(KEY/INDEX):默認(rèn)的,index,key關(guān)鍵字來設(shè)置
- 全文索引(FullText):在特定的數(shù)據(jù)庫引擎才有
-- 索引的使用(基礎(chǔ)語法)
-- 1、在創(chuàng)建表的時(shí)候字段增加索引
-- 2、創(chuàng)建完畢后,增加索引
-- 顯示所有的索引信息
SHOW INDEX FROM `shop`
-- 增加一個(gè)索引 索引名(列名)
ALTER TABLE shop.account ADD FULLTEXT INDEX `name`(`name`)
-- EXPLAIN 分析sql執(zhí)行的狀況
EXPLAIN SELECT * FROM student -- 非全文索引
EXPLAIN SELECT * FROM student WHERE MATCH(`studentname`)
-- 索引測試
select *from app_user where `name`='用戶9999';
explain SELECT *FROM app_user WHERE `name`='用戶9999';
-- create index 索引名 on 表(字段)
create index id_app_user_name on app_user(`name`)
索引在大數(shù)據(jù)量的時(shí)候非常有用。
三、索引原則
- 索引不是越多越好
- 不要對經(jīng)常變動(dòng)的字段加索引
- 小數(shù)據(jù)量的表不需要索引
- 索引一般加在常用的查詢字段上
索引的數(shù)據(jù)結(jié)構(gòu)
Hash類型的索引
Btree:InnoDB的默認(rèn)數(shù)據(jù)結(jié)構(gòu)
閱讀:https://blog.codinglabs.org/articles/theory-of-mysql-index.html