MySQL索引,你知道有幾種型別呢?

2021-09-25 07:16:45 字數 3777 閱讀 8405

一、簡介

mysql目前主要有以下幾種索引型別:

1.普通索引

2.唯一索引

3.主鍵索引

4.組合索引

5.全文索引

二、語句

create table table_name[col_name data type][unique|fulltext][index|key]index_name[asc|desc]

1.unique|fulltext為可選引數,分別表示唯一索引、全文索引

2.index和key為同義詞,兩者作用相同,用來指定建立索引

3.col_name為需要建立索引的字段列,該列必須從資料表中該定義的多個列中選擇

4.index_name指定索引的名稱,為可選引數,如果不指定,預設col_name為索引值

5.length為可選引數,表示索引的長度,只有字串型別的字段才能指定索引長度

6.asc或desc指定公升序或降序的索引值儲存

三、索引型別

1.普通索引

是最基本的索引,它沒有任何限制。它有以下幾種建立方式:

(1)直接建立索引

create index index_name on table(column(length))

(2)修改表結構的方式新增索引

alter table table_name add index index_name on (column(length))

(3)建立表的時候同時建立索引

create tabletable(

idint(11) not null auto_increment ,

titlechar(255) character not null ,

contenttext character null ,

timeint(10) null default null , primary key (id), index index_name (title(length))

)(4)刪除索引

drop index index_name on table

2.唯一索引

與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種建立方式:

(1)建立唯一索引

create unique index indexname on table(column(length))

(2)修改表結構

alter table table_name add unique indexname on (column(length))

(3)建立表的時候直接指定

create tabletable(

idint(11) not null auto_increment ,

titlechar(255) character not null ,

contenttext character null ,

timeint(10) null default null , unique indexname (title(length))

);3.主鍵索引

是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許有空值。一般是在建表的時候同時建立主鍵索引:

create tabletable(

idint(11) not null auto_increment ,

titlechar(255) not null , primary key (id)

);4.組合索引

指多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第乙個字段,索引才會被使用。使用組合索引時遵循最左字首集合

alter tabletableadd index name_city_age (name,city,age);

5.全文索引

主要用來查詢文字中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是乙個搜尋引擎,而不是簡單的where語句的引數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以建立全文索引。值得一提的是,在資料量較大時候,現將資料放入乙個沒有全域性索引的表中,然後再用create index建立fulltext索引,要比先為一張表建立fulltext然後再將資料寫入的速度快很多。

(1)建立表的適合新增全文索引

create tabletable(

idint(11) not null auto_increment ,

titlechar(255) character not null ,

contenttext character null ,

timeint(10) null default null , primary key (id),

fulltext (content)

);(2)修改表結構新增全文索引

alter table article add fulltext index_content(content)

(3)直接建立索引

create fulltext index index_content on article(content)

四、缺點

1.雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。因為更新表時,不僅要儲存資料,還要儲存一下索引檔案。

2.建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會增長很快。

索引只是提高效率的乙個因素,如果有大資料量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。

五、注意事項

使用索引時,有以下一些技巧和注意事項:

1.索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。

2.使用短索引

對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。

3.索引列排序

查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。

4.like語句操作

一般情況下不推薦使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。

5.不要在列上進行運算

這將導致索引失效而進行全表掃瞄,例如

select * from table_name where year(column_name)<2017;

6.不使用not in和<>操作

MySQL索引,你知道有幾種型別呢?

一 簡介 mysql目前主要有以下幾種索引型別 1.普通索引 2.唯一索引 3.主鍵索引 4.組合索引 5.全文索引 二 語句 create table table name col name data type unique fulltext index key index name asc de...

js錯誤有幾種型別?

syntaxerror 物件 syntaxerror物件是解析 時發生的語法錯誤。變數名錯誤 var1a uncaught syntaxerror invalid or unexpected token 缺少括號 console.log hello uncaught syntaxerror unex...

mysql索引有幾種 MySQL有哪些索引型別

mysql索引型別 索引是一種資料結構,可以是btree,rtree,或者hash結構.btree適合用於查詢某範圍內的資料,可以很快的從當前資料找到下條資料.rtree常用於查詢比較接近的資料.hash結構則適用於隨機訪問的場合,查詢每條資料的時間幾乎相同.顯然,若要查詢某個時間段的資料,用btr...