system > const > eq_ref > ref > range > index > all注意:這裡主要針對mysql5.6進行講解,與其他版本有區別,但是原理過程一致
# 教師表
create
table teacher(
tid int(5
),tname varchar(20
),tcid int(5
));# 教師卡
create
table teachercard(
tcid int(5
),tcdesc varchar(20
));# 插入教師資訊
insert
into teacher values(1
,'tz',1
);insert
into teacher values(2
,'tw',2
);insert
into teacher values(3
,'tl',3
);# 插入教師卡資訊
insert
into teachercard values(1
,'tzdesc');
insert
into teachercard values(2
,'twdesc');
insert
into teachercard values(3
,'tldesc');
# 教師表新增主鍵索引
alter
table teacher add
constraint pk_tid primary
key(tid)
;
衍生表只有一條資料的主查詢;衍生表通過主鍵查詢只有一條資料,再通過這條資料進行主查詢。
# 子查詢為主鍵查詢
explain
select
*from
(select
*from test01 where tid =
1) t;
子查詢通過主鍵查詢得出一條資料(該條資料構成衍生表),通過衍生表的資料進行主查詢,其衍生表的索引型別為system。
僅僅能查到一條資料的sql,用於primary key 或 unique的索引(其他索引型別不屬於)。
# 主鍵查詢只有一條資料的情況,型別為const
唯一性索引,表索引與另外表的主鍵進行關聯,兩張表之間每條資料要一一對應(每個都要一一對應,不能乙個對應多個,不能沒有對應),查詢的資料在表中是唯一性,不能有重複。
# 給teachercard新增主鍵
alter
table teachercard add
constraint pk_tcid primary
key(tcid)
;# 對teacher表進行索引唯一查詢
explain
select t.tcid from teacher t, teachercard tc where t.tcid = tc.tcid;
主表(沒有外來鍵的表)為eq_ref:
非唯一線性索引,對於每個索引鍵的查詢返回的資料為0或多條。
# 給teacher表的tname的字段新增索引
alter
table teacher add
index tname_index (tname)
;# 根據tname = tz查詢出兩條資料
explain
select
*from teacher where tname =
'tz'
;
根據tname索引直接查詢出來的值為ref型別。
檢查指定範圍行,where後面是乙個範圍查詢(between、in、>、
# 檢視range型別的索引
explain
select
*from teacher t where t.tid in(1
,2);
explain
select
*from teacher where tid between
1and2;
explain
select
*from teacher where tid <
3;
範圍查詢指定的索引,其索引型別為range:
查詢索引中的所有資料。
# 查詢索引的所有資料,其中tname就是索引
查詢表中的所有資料,或者根據不是索引的字段查詢。
# 直接查詢
explain
select
*from teacher;
type型別總結: mysql索引型別介紹 mysql索引型別介紹
索引型別介紹 主鍵索引 primary key 要求關鍵字不能重複,也不能為null,同時增加主鍵約束 主鍵索引定義時,不能命名 唯一索引 unique index 要求關鍵字不能重複,同時增加唯一約束 普通索引 index 對關鍵字沒有要求 全文索引 fulltext key 關鍵字的 不是所有欄...
mysql索引型別介紹 mysql索引型別介紹
b 樹是多路平衡查詢樹,相對於平衡二叉樹,對父結點的直接子結點個數,不再僅限於2,可以指定m 自定義 這樣可以在樹的深度不大量增加的前提下,儲存更多的結點。b 樹是通常在檔案系統中使用。特點 a 樹的每個結點最多有m 自定義 子結點 b 若根結點不是葉子結點,則至少有兩個子結點 c 除根結點外的所有...
MySQL索引 索引型別
在mysql有兩種索引型別 hash b 樹 hash索引原理比較簡單就是利用了乙個hash表 說b 樹之前先要了解b 樹的資料結構。不廢話,先上圖。對b 樹做一些解釋,參考上圖。b 樹的資料都在葉子節點上 非葉子節點上的這些都是範圍。舉例 最上面的根節點上的資料是5,28,65代表的是它的三個子樹...