mysql索引種類(索引種類和建立索引)

2022-01-21 14:02:51 字數 3664 閱讀 5963

一、mysql索引種類

1、加速查詢:

查詢普通欄位和查詢有索引字段,哪個方式查詢速度快:根據索引來查字段速度更快

2、建立索引:

為userinfo表email欄位建立索引:create index ix_name on userinfo;#建立欄位email索引檔案,起別名ix_name
為某個字段建立索引會建立額外檔案(某種格式儲存),下次查詢這個字段,先去檔案中查詢資料在表中的位置,拿著這位置去表中定位資料。(類似於查字典)

3.索引種類

hash索引:索引表(無序的排列)

把資料轉換成乙個hash值(數值),放在索引表裡面,再加上這個資料的儲存位址

查詢的時候會根據資料查詢到儲存位址。

注意:資料庫的值和索引表存的數值順序是不一樣的。因為這個是無序的排列,所以在資料庫中查詢大於/小於多少的資料可能花的時間更長。

缺點:在某個範圍查詢資料速度慢 優點:查詢單值速度快btree索引

二叉樹

#

不同的儲存引擎支援的索引型別也不一樣

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 等索引;

4.建立索引

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;

alter table 表名 modify 列名 int, drop primary key;

聯合索引聯合索引是將n個列組合成乙個索引

其應用場景為:頻繁的同時使用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...