功能
索引的功能就是加速查詢 mysql中的primary key,unique,聯合唯一也都是索引,這些索引除了加速查詢以外,還有約束的功能
mysql常用的索引
普通索引index:加速查詢
唯一索引:
-主鍵索引primary key:加速查詢+約束(不為空、不能重複)
-唯一索引unique:加速查詢+約束(不能重複)
聯合索引:
-primary key(id,name):聯合主鍵索引
-unique(id,name):聯合唯一索引
-index(id,name):聯合普通索引
舉個例子來說,比如你在為某商場做乙個會員卡的系統。
這個系統有乙個會員表
有下列字段:
會員編號 int
會員姓名 varchar(10)
會員身份證號碼 varchar(18)
會員** varchar(10)
會員住址 varchar(50)
會員備註資訊 text
那麼這個 會員編號,作為主鍵,使用 primary
會員姓名 如果要建索引的話,那麼就是普通的 index
會員身份證號碼 如果要建索引的話,那麼可以選擇 unique (唯一的,不允許重複)
#除此之外還有全文索引,即fulltext
會員備註資訊 , 如果需要建索引的話,可以選擇全文搜尋。
用於搜尋很長一篇文章的時候,效果最好。
用在比較短的文字,如果就一兩行字的,普通的 index 也可以。
但其實對於全文搜尋,我們並不會使用mysql自帶的該索引,
而是會選擇第三方軟體如sphinx,專門來做全文搜尋。
#其他的如空間索引spatial,了解即可,幾乎不用
各個索引的應用場景
索引的兩大型別
#我們可以在建立上述索引的時候,為其指定索引型別,分兩類
hash型別的索引:查詢單條快,範圍查詢慢
btree型別的索引:b+樹,層數越多,資料量指數級增長(我們就用它,因為innodb預設支援它)
#不同的儲存引擎支援的索引型別也不一樣
innodb 支援事務,支援行級別鎖定,支援 b-tree、full-text 等索引,不支援 hash 索引;
myisam 不支援事務,支援表級別鎖定,支援 b-tree、full-text 等索引,不支援 hash 索引;
memory 不支援事務,支援表級別鎖定,支援 b-tree、hash 等索引,不支援 full-text 索引;
ndb 支援事務,支援行級別鎖定,支援 hash 索引,不支援 b-tree、full-text 等索引;
archive 不支援事務,支援表級別鎖定,不支援 b-tree、hash、full-text 等索引;
建立刪除索引的語法
#方法一:建立表時
create table 表名 (
欄位名1 資料型別 [完整性約束條件…],
欄位名2 資料型別 [完整性約束條件…],
[unique | fulltext | spatial ] index | key
[索引名] (欄位名[(長度)] [asc |desc])
#方法二:create在已存在的表上建立索引
create [unique | fulltext | spatial ] index 索引名
on 表名 (欄位名[(長度)] [asc |desc]) ;
#方法三:alter table在已存在的表上建立索引
alter table 表名 add [unique | fulltext | spatial ] index
索引名 (欄位名[(長度)] [asc |desc]) ;
#刪除索引:drop index 索引名 on 表名字;
複製**
#建立索引
alter table test add index index_name(name);
#建立索引
create index index_name on test(name);
#檢視索引
desc table;
#檢視索引
show index from table;
#刪除索引
alter table test drop key index_name;
#新增主鍵索引(略)
#新增唯一性索引
alter table student add unique key uni_***(***);
#檢視表中資料行數
select count(*) from city;
#檢視去重資料行數
select count(distinct name) from city;
# 字首索引
根據欄位的前n個字元建立索引
alter table test add index idx_name(name(10));
聯合索引
多個字段建立乙個索引
例:where a.女生 and b.身高 and c.體重 and d.身材好
index(a,b,c)
特點:字首生效特性
a,ab,ac,abc,abcd 可以走索引或部分走索引
b bc bcd cd c d ba ... 不走索引
原則:把最常用來做為條件查詢的列放在最前面
#建立people表
create table people (id int,name varchar(20),age tinyint,money int ,gender enum('m','f'));
#建立聯合索引
alter table people add index idx_gam(gender,age,money);
mysql 雜湊索引 MySQL索引之雜湊索引
雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...
mysql主鍵索引 MySQL索引之主鍵索引
在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...
mysql聚集索引 MySQL索引之聚集索引介紹
在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...