MySQL的索引(Index)詳解

2021-09-10 23:51:20 字數 3426 閱讀 9029

索引分類

(1)普通索引(key indexes)

(2)唯一索引(unique indexes)

(3)主鍵索引(primary key indexes)

(4)組合索引(composite index)

(5)字首索引( prefix indexes)

(6)全文索引(full-text indexes)

(7)雜湊索引(hash indexes)

(8)空間索引(spatial indexes)

普通索引是最基本的索引,沒什麼限制,根據建立時機不同,主要有兩種方式:

(1)在建立表時同時建立普通索引

create [temporary] table [if not exists] table_name

( col_name column_definition,

index|key [index_name] [index_type] (col_name [(length)] [asc | desc])

)index_type:

using

其中方括號中內容表示可選項,豎線|表示兩者選一。

(1)col_name:列名;

(2)column_definition:列的具體定義,這裡省略了;

(3)index|key:表示使用index和key都能建立普通索引,因為在mysql中,index和key是一樣的。

(4)[index_name]:索引的名字,是可選項,如果沒有寫,預設使用欄位名作為索引的名稱,一般以idx_欄位名作為字首來命名;

(5)[index_type]:索引型別,表示索引的資料結構,有兩類:btree和hash,如果沒有指明,預設是btree;

(6)col_name [(length)] [asc | desc]:col_name是要新增索引的列,length表示要在型別為字串的列的前length個字元構成的字串上新增索引,[asc|desc]表示公升序還是降序方式儲存索引,預設是公升序方式儲存;

例:

create table my_table

(id int(11) not null auto_increment,

name varchar(20) not null,

address varchar(20) not null,

primary key(id),

index idx_name (name)

);

該語句在建立my_table表時,同時在字段name上建立了乙個名為idx_name的的普通索引。

(2)建立表之後建立索引

——修改表結構的方式新增索引

alter table table_name add index index_name (col_name [(length)] [asc | desc])
例如:

alter table my_table add index idx_address  (address)
該語句在my_table表的address欄位上新增了名為idx_address的普通索引。

——直接建立索引

create index index_name on table(column[(length)] [asc|desc])
例如:

create index idx_name on my_table(name)
可以使用如下ddl語句刪除索引:

drop index index_name on my_table
與普通索引類似,不同的是要求索引列的值必須唯一,但是多個null值。與普通索引建立方式相似:

建立表時建立:

create [temporary] table [if not exists] table_name

( col_name column_definition,

unique [index|key] [index_name] [index_type] (col_name [(length)] [asc | desc])

)index_type:

using

建立表後直接建立:

create unique index index_name on table(column[(length)] [asc|desc])
修改表結構方式建立:

alter table table_name add unique indexname (column(length))
主鍵索引不需要主動取建立,表建立主鍵後,自動在主鍵上建立,主鍵索引名稱總是為primary,主鍵值的唯一和非空也就保證了主鍵索引的列值必須唯一且不能為空,所以主鍵索引可以看成是特殊的唯一索引。

create table my_table

(id int(11) not null auto_increment,

name varchar(20) not null,

address varchar(20) not null,

primary key(id)

);

該語句在建立表時建立了主鍵id,同時會在id上建立主鍵索引,如圖:

指在多個欄位上建立的索引,在多個欄位上建立的普通索引和唯一索引都是組合索引,所謂組合實際是字段的組合,對於多個欄位上的唯一索引,要求組合字段必須唯一。可以如下建立組合索引

create table my_table

(id int(11) not null auto_increment,

name varchar(20) not null,

address varchar(20) not null,

primary key(id),

index idx_name_address (name,address)

);

該語句在字段name和address兩個欄位上建立普通索引,結果如圖:

如果要在兩個欄位上建立唯一索引,只要將index替換成unique即可。

也可以在建立表後建立組合索引 

alter table table_name add index idx_name_address (name,address);
create index idx_name_address on my_table(name,address)
雜湊索引是基於雜湊表實現的,只有精確匹配索引中所有列的查詢,雜湊所有才有效。

mySQL中索引index詳解

索引 mysql 索引 index 注意 1 不要過度索引 2 索引條件列 where後面最頻繁的條件列 3 盡量索引雜湊值,過於集中的值不要索引。索引型別 1 普通索引 index 僅僅是加快查詢速度 2 唯一索引 unique index 行上的值不能重複 3 主鍵索引 primary key ...

關於MySQL索引index雜談

mysql建索引命令 create index index name on tablename clomun name.比如建了 create index o n p d on t db netspeed o,n,p,d 建好索引之後,使用select 命令進行查詢 select count fro...

mysql整理12 索引index整理

為了提高查詢排序的速度 索引需要單獨檔案來儲存維護。表資料發生變化需要維護索引表。適合新增索引的情況 表資料量足夠大 增刪改操作較少 高基數列1.可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。2.通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。3.可以加速表和表之間的連線。4....