MySQL的索引分析

Adrian_Dai發表於2018-03-06

MySQL的索引的分類:

一、單值索引(普通索引)

二、唯一索引

三、複合索引

四、主鍵索引

五、Full-text索引(全文索引)

 

 

單值索引

普通索引:即只包含一個列的索引,一個表可有多個單值索引

 

建立索引的語句:

CREATE INDEX index_name ON table(column(length))

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `name` char(255) CHARACTER NOT NULL ,

    PRIMARY KEY (`id`),

    INDEX index_name (name(length))

)

 

 

唯一索引

索引的值必須是唯一的,但是允許有空值

 

建立索引的語句:

CREATE UNIQUE INDEX indexName ON table(column(length))

ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `name` char(255) CHARACTER NOT NULL ,

    UNIQUE indexName (name(length))

);

 

複合索引

一個索引包含多個列,但是使用複合索引的時候需要遵循最佳左字首法則(即查詢從索引最左列開始,並且不跳過索引中的列)

 

建立索引的語句:

ALTER TABLE `table` ADD INDEX name_addr_age (name,addr,age);

 

主鍵索引

特殊的一種索引,不允許有空值,在表建立時便同時建立

 

 

Full-text索引(全文索引)

主要是用來查詢文字中的關鍵字,只有在char varchar text的列上建立該索引

(tips:如果在建立大資料量的表的時候,建議先插入資料再建該索引)

(原因:索引便於查詢,但是對於增刪頻繁的表來說會變得更消耗效能)

 

建立索引的語句:

CREATE FULLTEXT INDEX index_content ON table(content)

ALTER TABLE table ADD FULLTEXT index_content(content)

CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `content` text CHARACTER NULL ,

    PRIMARY KEY (`id`),

    FULLTEXT (content)

);

 

 

需要建立索引的情況

1. 頻繁作為查詢的欄位

2. 外來鍵關係

3. 查詢中排序的欄位,排序欄位如果通過索引進行查詢會提高排序的效率

4. 查詢中統計或分組欄位

待補充!!!

 

不需要建立索引的情況

1. 表記錄太少

2. 經常增刪的表(因為更新表的時候,會同時更新索引,儲存索引的檔案,加重IO負擔)

3. 資料列中的內容重複且分佈平均

待補充!!!

 

索引失效的情況

1. 複合索引使用時不遵循最佳左字首法則

2. 在索引列上進行計算、函式、型別轉換(包含隱式)會導致索引失效而進行全表掃描

3. 減少使用select *

4. like %aaa%” 不會使用索引而like aaa%”可以使用索引

5. 字串不加單引號會導致索引失效

6. Is nullis not null 會導致索引失效

待補充!!!

相關文章