一、mysql索引種類
1、加速查詢:
查詢普通欄位和查詢有索引字段,哪個方式查詢速度快:根據索引來查字段速度更快
2、建立索引:
為userinfo表email欄位建立索引:create index ix_name on userinfo;#建立欄位email索引檔案,起別名ix_name為某個字段建立索引會建立額外檔案(某種格式儲存),下次查詢這個字段,先去檔案中查詢資料在表中的位置,拿著這位置去表中定位資料。(類似於查字典)
3.索引種類
hash索引:索引表(無序的排列)把資料轉換成乙個hash值(數值),放在索引表裡面,再加上這個資料的儲存位址
查詢的時候會根據資料查詢到儲存位址。
注意:資料庫的值和索引表存的數值順序是不一樣的。因為這個是無序的排列,所以在資料庫中查詢大於/小於多少的資料可能花的時間更長。
缺點:在某個範圍查詢資料速度慢 優點:查詢單值速度快btree索引:
二叉樹
#4.建立索引不同的儲存引擎支援的索引型別也不一樣
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 等索引;
1.額外的檔案儲存特殊的資料結構普通索引普通索引僅有乙個功能:加速查詢2.查詢快,插入更新刪除慢
3.命中索引(使用索引表)
建立表+普通索引
create table in1(建立索引nid int
notnull auto_increment primary key,
name varchar(32) not
null,
email varchar(64) not
null,
extra text,index ix_name (name) #ix_name是索引名,name欄位建立索引)
create index ix_name on table_name(column_name);刪除索引
drop index ix_name on table_name;檢視索引
show index from table_name;唯一索引唯一索引有兩個功能:加速查詢和唯一約束(可含null)
建立表+唯一索引
create table in1(建立唯一索引nid int
notnull auto_increment primary key,
name varchar(32) not
null,
email varchar(64) not
null,
extra text,unique ix_name (name))
create unique index 索引名 on 表名(列名)刪除唯一索引
drop unique index 索引名 on 表名主鍵索引主鍵有兩個功能:加速查詢 和 唯一約束(不可含null)
建立表+建立主鍵
create table in1(建立主鍵nid int
notnull auto_incrementprimary key,
name varchar(32) not
null,
email varchar(64) not
null,
extra text,
index ix_name (name))or
create table in1(
nid int
notnull auto_increment,
name varchar(32) not
null,
email varchar(64) not
null,
extra text,
primary key(ni1),
index ix_name (name)
)
alter table 表名 add primary key(列名);刪除主鍵
alter table 表名 drop primary key;聯合索引聯合索引是將n個列組合成乙個索引alter table 表名 modify 列名 int, drop primary key;
其應用場景為:頻繁的同時使用n列來進行查詢,如:where n1 = 'alex' and n2 = 666
建立表
create table in3(建立聯合索引nid int
notnull auto_increment primary key,
name varchar(32) not
null,
email varchar(64) not
null,
extra text
)
create index ix_name_email on in3(name,email);#就是在()中寫多個列名最左字首匹配,查詢:
注意:對於同時搜尋n個條件時,組合索引的效能好於索引合併。
5.不真實存在的索引
名詞:
覆蓋索引:在索引檔案中直接獲取資料
索引合併:使用多個單列索引搜尋
索引合併示例:
select * from tb1 where name = 'alex
'or nid in (11,22,33); #這裡name,nid欄位都是索引
mysql 索引種類
從資料結構角度 1 b 樹索引 o log n 關於b 樹索引,可以參考 mysql索引背後的資料結構及演算法原理 2 hash索引 a 僅僅能滿足 in 和 查詢,不能使用範圍查詢 b 其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多...
mysql常用的索引種類
mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度 mysql目前主要有以下幾種索引型別 fulltext,hash,btree,rtree。1.fulltext 即為全文索引,目前只有myisam引擎支援。其可以在create table alter ta...
mysql常用的索引種類
mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度 mysql目前主要有以下幾種索引型別 fulltext,hash,btree,rtree。1.fulltext 即為全文索引,目前只有myisam引擎支援。其可以在create table alter ta...