索引,是數據庫中專門用於幫助用戶快速查詢數據的一種數據結構。相似於字典中的目錄,查找字典內容時能夠根據目錄查找到數據的存放位置,而後直接獲取便可。mysql
索引是在數據庫中再建立一個文件。sql
有索引和無索引查詢時間差距巨大。數據庫
全表掃描效率最低。數據結構
上萬條數據用樹型結構,最少14此就搞定。ide
普通索引 只能幫助查找
惟一索引 只能幫助查找,內容不容許重複,能夠有null
主鍵索引 只能幫助查找,內容不容許重複,不容許null,一張表只能有一個主鍵
組合索引 多列共同組成索引,普通多列索引(name,email)
全文索引 分詞、斷句(依據逗號,空格),對中文支持很差,中文全文索引不用mysql的引擎。經常使用solr,lucence,sphix性能
普通索引僅有一個功能:加速查詢spa
建立普通索引3d
View Codecode
建立表後再加索引 create index index_name on table_name(column_name)
刪除索引 drop index_name on table_name;
查看索引
show index from table_name;
注意:對於建立索引時若是是BLOB 和 TEXT 類型,必須指定length。blog
惟一索引有兩個功能:加速查詢 和 惟一約束(可含null)
create table in1( nid int not null 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 not null auto_increment primary key, name varchar(32) not null, email varchar(64) not null, extra text, index ix_name (name) ) OR create table in1( nid int not null 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 not null 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個條件時,組合索引的性能好於多個單一索引合併。