MySQL學習(一)索引的基本認識

2021-08-14 11:01:24 字數 3632 閱讀 6292

額外的:我已知的自動建立索引的時機:建立主鍵,唯一,外來鍵約束的時候

一、索引簡介

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 顯然在資料量很大時效率很低。優化的查詢演算法...