mysql管理索引 mysql 索引管理

2021-10-17 13:23:46 字數 2845 閱讀 8554

功能

索引的功能就是加速查詢 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 也有人把聚集索引稱為聚簇索引。當然了,聚集索...