索引
5.1 索引的概念
資料庫的索引好比新華字典的音序表,它是對資料庫表中一列或多列的值進行排序後的一種結構,其作用就是提高表中資料的查詢速度。
注:建立表的時候建立索引
create table 表名
欄位名 資料型別[完整性約束條件],
欄位名 資料型別[完整性約束條件],
欄位名 資料型別
[unique|fulltext|spatial] index|key
[別名] (欄位名1 [(長度)]) [asc|desc])
注: unique:可選引數,表示唯一性約束
fulltext:可選引數,表示全文約束
spatial:可選引數,表示空間約束
index和key:用來表示欄位的索引,二者選一即可
別名:可選引數,表示建立的索引的名稱
欄位名1:指定索引對應欄位的名稱
長度:可選引數,用於表示索引的長度
asc和desc:可選引數,其中,asc表示公升序排列,desc表示降序排列
在上述語法格式中,[ ]中都是可選引數
5.2 建立索引
建立索引的方式有三種,具體如下:
5.2.1 建立表的時候建立索引:
(1)普通索引
如:在t1表中id欄位上建立索引,sql語句如下:
create table t1
id int,
name varchar(20),
score float,
index (id)
(2)唯一性索引
如:建立乙個表名為t2的表,在表中的id欄位上建立索引名為unique_id的唯一性索引,並且按照公升序排列,sql語句如下:
create table t2
id int not null ,
name varchar(20) not null ,
score float ,
unique index unique_id(id asc)
(3)全文索引
如:建立乙個表名為t3的表,在表中的name欄位上建立索引名為fulltext_name的全文索引, sql語句如下:
create table t3
id int not null ,
name varchar(20) not null ,
score float ,
fulltext index fulltext_name(name)
(4)單列索引
如:建立乙個表名為t4的表,在表中的name欄位上建立索引名為single_name的單列索引, sql語句如下:
create table t4
id int not null ,
name varchar(20) not null ,
score float ,
index single_name(name (20) )
(5)多列索引
如:建立乙個表名為t5的表,在表中的id和name欄位上建立索引名為multi的多列索引, sql語句如下:
create table t4
id int not null ,
name varchar(20) not null ,
score float ,
index multi(id,name (20) )
(6)* 空間索引
如:建立乙個表名為t6的表,在空間型別為geometry的字段上建立空間索引,sql語句如下:
create table t6
id int,
space geometry not null,
spatial index sp(space)
)engine=myisam;
注:建立空間索引時,所在欄位的值不能為空值,並且表的儲存引擎為myisam。
5.2.2 使用create index 語句在已經存在的表上建立索引
若想在乙個已經存在的表上建立索引,可以使用create index語句,create index語句建立索引的具體語法格式如下所示:
create [unique|fulltext|spatial] index 索引名on 表名 (欄位名 [(長度)] [asc|desc]);
如:在t1表中的id欄位上建立乙個名稱為unique_id的唯一性索引,sql語句如下所示:
create unique index unique_id on ti (id);
5.2.3 使用alter table語句在已經存在表上建立索引
在已經存在的表中建立索引,使用alter table語句在已經存在表上建立索引的語法格式如下所示:
alter table 表名 add [unique|fulltext|spatial] index 索引名 (欄位名 [(長度)] [asc|desc]);
如:在t1表中的id欄位上建立乙個名稱為unique_id的唯一性索引,sql語句如下:
alter table t1 add unique unique_id (id);
注:使用show create table語句檢視表的結構, sql**如下:
show create table 表名;
注:為了檢視索引是否被使用,可以使用explain語句進行檢視,sql**如下:
explain select * from 表名 [where 欄位名=1];
5.3 刪除索引
刪除索引的方式有兩種,具體如下:
1. 使用alter table刪除索引
使用alter table刪除索引的基本語法格式如下所示:
alter table 表名 drop index 欄位名;
2. 使用drop index刪除索引
使用drop index刪除索引的基本語法格式如下所示
drop index 索引名 on 表名;
MySQL索引專題一 認識索引
想寫mysql的索引專題是源於之前自己在學習mysql索引時痛苦的經歷,你在網上搜尋關於mysql的索引的文章,大多是支離破碎,沒有系統性的對知識點的羅列堆砌,文章中會說明你要如何如何做,但是很少涉及去講為什麼要這麼做,哪些不能做,很難對mysql有乙個系統性的認知,學習如果沒有系統性的話,就很難在...
0115關於索引認識
關於索引一點理解 1從整體理解聯合索引,order by以及group by之間的過程 改語句很有代表性,自己分析,理解為什麼 create table t6 c1 char 1 not null default c2 char 1 not null default c3 char 1 not nu...
MySQL 聚簇索引和非聚簇索引的認識
聚簇索引是對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序的演算法。特點是儲存資料的順序和索引順序一致。一般情況下主鍵會預設建立聚簇索引,且一張表只允許存在乙個聚簇索引。在 資料庫原理 一書中是這麼解釋聚簇索引和非聚簇索引的區別的 聚簇索引的葉子節點就是資料節點,而非聚簇索引的葉子節點仍然是索...