mysql基礎(三)

索引

索引,是數據庫中專門用於幫助用戶快速查詢數據的一種數據結構。相似於字典中的目錄,查找字典內容時能夠根據目錄查找到數據的存放位置,而後直接獲取便可。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)
)

建立表 + 惟一索引
View Code

 

建立惟一索引

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)
)

建立表 + 建立主鍵
View Code

 

建立主鍵

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
)

建立表
View Code

 

 

建立組合索引

create index ix_name_email on in3(name,email);

 

 

 

注意:對於同時搜索n個條件時,組合索引的性能好於多個單一索引合併。

相關文章
相關標籤/搜索