索引在龐大的數據庫上最能體現出作用,所謂索引就是根據需求將指定的列提取出來做索引表,可以顯著提高在查找數據方面的速度。
在索引的前提下還可以指定索引值是否唯一,索引值是單列或是多列索引。
?
根據索引類型,索引分為:
普通索引:
name,只能幫助查找
唯一索引:
name,只能幫助查找,內容不允許重復,可以為null,但也限制唯一。
主鍵索引:
name,只能幫助查找,內容不允許重復,不允許null,一張表只能有一個主鍵,但也可以通過unique進行組合
組合索引:
多列共同組成索引,可以有如下模式,1 是不約束的就是說不唯一,2是唯一的
普通多列索引(name,email)
聯合唯一索引(name,email)
根據索引方式又分為:
覆蓋索引
當查詢的數據是從索引表里面查找的,則是覆蓋索引
索引合并
將兩個單獨的索引放到一起,就是索引合并。
默認的查找方式是全表掃描。
在創建表時創建索引:
create table person(id int not null primary key auto_increment,name char(10) not null,age int not null,address varchar(100) not null,index index_name(name));
普通索引:
create index index_name on person(pname);
?
刪除索引:
drop index_name on tableName;
?查看索引:
show index from tableName;
?
唯一索引:
建表時創建唯一索引:
create table person(id int not null primary key auto_increment,name char(10) not null,age int not null,address varchar(100) not null,unique index_name(name));
創建唯一索引:
creae unique index index_name on tableName(ColumnName);
? 刪除唯一索引:
?drop unique index index_name on tabeName;?
?
?
主鍵索引:
創建表時創建索引:
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) )ORcreate 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 tableName primary key(ColumnName);?
刪除索引:
方式一: alter table tableName drop primary key;方式二: alter table tableName modify ColumnName int,drop primary key;
?
組合索引:
設有如下表:
create table tb1(id int not null primary key auto_incremet,name char(10) not null,age int(2) not null,other text)engine=innoDB default charset=utf8;
創建組合索引:
?create index index_name on tableName(columnName1,columnName2);?
如上創建組合索引之后,查詢:
- name and email ?-- 使用索引
- name ? ? ? ? ? ? ? ? -- 使用索引
- email ? ? ? ? ? ? ? ? -- 不使用索引
注意:對于同時搜索n個條件時,組合索引的性能好于多個單一索引合并。
?
other:
explain? 關鍵字可以查看查詢語句是通過何種方式查找數據。
explain select * from person where xx=xx;
如果type列示 all則表示全表掃描
如果是ref 則是通過索引查找的
all 表示 全表掃描
ref 表示 普通索引查找
const 唯一索引查找 /? 主鍵索引也是const
組合索引 表示
在全表掃描模式下,如果想達到索引效果,可以用limit 1; 如果只要求一條數據的話。limit 1 表示取得一條數據后就返回。
在 like 模式下, 如果 "%xx" 模式一般不走索引模式,因為前綴為% 表示一切皆有可能, 如果要走索引模式 必須為: “xx%”
reverse(列名) 也一樣不走模式。除非是值 reverse(value)
對于比較運算符 來說 一般除了大于 和 不等于 不走索引外,其余的一般都走索引。
對于 or 運算符 ,只有 當or 兩邊的索引都是索引才走索引,否則不走。
?