額外的:我已知的自動建立索引的時機:建立主鍵,唯一,外來鍵約束的時候
一、索引簡介
1.1、索引的含義和特點
底層實現分 btree索引(主要是b樹索引),hash索引
索引優點:提高查詢,聯合查詢,分級和排序的時間
索引缺點:索引佔空間,維護(建立,更新,維護)索引時需要耗費時間
1.2、索引的分類
1、普通索引
不加任何限制條件
2、唯一性索引
使用unique引數
3、全文索引
使用fulltext引數,只能建立在char,varchar,text型別的字段上,只有myisam儲存引擎支援全文索引。
4、單列索引
在乙個欄位上建立的普通索引,唯一性索引或全文索引
5、多列索引
在多個欄位上建立的普通索引,唯一性索引或全文索引
6、空間索引
使用spatial引數,只有myisam儲存引擎支援空間索引,必須建立在空間資料型別上,且必須非空,初學者很少用到。
1.3、索引的設計原則
1、選擇唯一性索引
2、為經常需要排序、分組和聯合操作的字段建立索引
如order by、group by、distinct,union等操作的字段,特別是排序
3、為常作為查詢條件的字段建立索引
4、限制索引的數目
避免過多地浪費空間
5、盡量使用資料量少的索引
6、盡量使用字首來索引
如指索引text型別欄位的前n個字元
7、刪除不再使用或者很少使用的索引
二、建立索引
2.1三種方式:
1、 建立表時建立索引
2、 已經存在的表上建立索引
3、 使用alter table語句來建立索引
2.1、建立表的時候建立索引
create table 表名 (屬性名 資料型別 [完整約束條件],
屬性名資料型別 [完整約束條件],
…
[unique|fulltext|spatialindex|key [別名] (屬性名1 [(長度)] [asc|desc])
);
1、建立普通索引
create tableindex1 (id int,
name varchar(20),
*** boolean,
index(id)
);show createtable index1\g;
2、建立唯一性索引
create tableindex2(id int unique,
name varchar(20),
unique index index2_id(id asc)
);show createtable index2\g;
看到在字段id上建立了兩個唯一索引id和index2_id,當然這樣是沒有必要的。
3、建立全文索引
create tableindex3 (id int,
info varchar(20),
fulltext index index3_info(info)
) engine=myisam;
4、建立單列索引
create tableindex4 (id int,
subject varchar(30),
indexindex4_st(subject(10))
);注意:只索引subject前10個字元
5、建立多列索引
create tableindex5 (id int,
name varchar(20),
*** char(4),
index index5_ns(name,***)
);explain select *from index5 where name=』123』\g;
explain select *from index5 where name=』123』and ***=』n』\g;
6、建立空間索引
create tableindex6 (id int,
space geometry not null,
spatial index index6_sp(space)
)engine=myisam;
2.2、在已經存在的表上建立索引
create [unique|fulltext|spatial]index 索引名 on 表名 (屬性名[(長度)] [asc|desc]);
1、建立普通索引
create indexindex7_id on example0(id);
2、建立唯一性索引
create uniqueindex index_8_id on index8(course_id);
3、建立全文索引
create fulltextindex index9_info on index9(info);
4、建立單列索引
create indexindex10_addr on index10(address(4));
5、建立多列索引
create indexindex11_na on index11(name, address);
6、建立空間索引
create spatialindex index12_line on index12(line);
2.3、用alter table語句來建立索引
alter table 表名 add [unique|fulltext|spatial] index 索引名 (屬性名[(長度)][asc|desc]);
1、建立普通索引
alter tableexample0 add index index12_name(name(20));
2、建立唯一性索引
alter tableindex14 add unique index index14_id(course_id);
3、建立全文索引
alter tableindex15 add index index15_info(info);
4、建立單列索引
alter tableindex 16 add index index16_addr(address(4));
5、建立多列索引
alter tableindex17 add index index17_na(name, address);
6、建立空間索引
alter tableindex18 add index index18_line(line);
三、刪除索引
drop index 索引名 on 表名;
drop index id onindex1;
MySQL索引專題一 認識索引
想寫mysql的索引專題是源於之前自己在學習mysql索引時痛苦的經歷,你在網上搜尋關於mysql的索引的文章,大多是支離破碎,沒有系統性的對知識點的羅列堆砌,文章中會說明你要如何如何做,但是很少涉及去講為什麼要這麼做,哪些不能做,很難對mysql有乙個系統性的認知,學習如果沒有系統性的話,就很難在...
mysql排序欄位的索引認識
因專案需要,需要對資料庫一張表進行排序,取前10名 該錶基數6w,invite sign geight 條件加上後資料為2w 未優化前,sql語句如下 select from wk active gt sign info where invite sign geight order by invit...
mysql索引學習(一)
mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質 索引是一種資料結構。資料庫查詢是資料庫的主要功能之一,最基本的查詢演算法是順序查詢 linear search 時間複雜度為o n 顯然在資料量很大時效率很低。優化的查詢演算法...