標籤:首碼 資料 使用 沒有 index btree hang 分享 原理
一、索引的概念索引:類似於字典的目錄,設定索引可以 加速資料尋找,對資料進行約束;
二、索引類型的類型:主鍵索引:保證資料唯一性,不能重複+不可為空普通索引:加速資料尋找唯一索引:加速尋找+不能從複複合式索引(多列):
三、索引的工作原理1、索引原理:如果要尋找的資料,沒有設定索引,會從前到後地毯式搜尋資料,如果設定了索引,會單獨建立一張額外表,按某種格式儲存該列資料位元置,方便尋找;
2、索引表的資料的格式 2.1、hash格式:會把列中資料逐一hash成hash值(數字)對應資料的儲存地址;
索引表:
資料hash值(數字) 儲存位置(數字)
888 666
988 4442.2、特點:索引表中的資料,和資料庫表中資料順序不一致了;(hash索引,適合單條資料尋找,不適合範圍查
找)
Btree格式:二叉樹,左側放比自己小的數字,右側放比自己大的資料
特點:範圍尋找速度快
3、建立索引:
普通索引:
建立索引名 on...表的..列
CREATE INDEX zhanggen on day61.`user`(email);
唯一索引:
create unique index 索引名稱 on 表名(列名)
drop unique index 索引名稱 on 表名
複合式索引(最左首碼匹配):
create unique index 索引名稱 on 表名(列名,列名)
drop unique index 索引名稱 on 表名
create index ix_name_email on userinfo3(name,email,)
名稱:覆蓋索引、合并索引
覆蓋索引:直接在索引檔案裡尋找,無需尋找資料庫檔案使用索引方式;
SELECT id FROM day61.`user` WHERE id=9999;
合并索引:把多個單列索引,聯合使用來尋找資料的方式;
SELECT id FROM day61.`user` WHERE id=9999 AND email="[email protected]";
複合式索引 和 索引合并的區別:
複合式索引:多列製造成一個索引
索引合并:只是使用索引的時候,把多個個單列的索引一起使用;
複合式索引效率 > 索引合并
複合式索引
----(name,email)
select * from userinfo3 where name=‘alex‘ and email=‘asdf‘;
select * from userinfo3 where name=‘alex‘;
索引合并
----name
----email
SELECT * FROM day61.`user` WHERE id=1993 and email=‘[email protected]‘;
select * from userinfo3 where name=‘id=1993‘;
select * from userinfo3 where email=‘[email protected]‘;
應用情境:
兩列經常聯合使用使用聯合索引
索引合并:單列資料 使用索引合并
MySQL查詢效能調最佳化