Mysql中的索引

前述:

一直都知道mysql中的索引,但都瞭解不深,這次專門花時間將mysql中的索引相關知識好好的瞭解一番

詳述:

Mysql索引的類型:

mysql索引的類型,是我們認識mysql的開始。充分了解mysql所提供的索引類型,也更便於我們瞭解在什麼場景使用什麼索引。
但一開始網上查資料時,發現對於mysql索引類型、分類,所查出來的資料,對於這個類型的數量都有或多或少的出入,讓我很是費解:
"這種類型的定義,不應該是統一的麼?怎麼不同的文章,對mysql類型描述,有的多一個,有的少一個呢?",
可能每個人對索引類型的認識都不同吧

下面我會將多個文章對比後,共有的索引類型列出。且將對比後,有出入的索引類型也列出,並給出自己對於該種類型的看法

 

普通索引(index):

顧名思義,這種所以是基本索引,沒有什麼特別特別之處,主要提供通過某字段的查詢效率

CREATE TABLE創建方式(建表時,添加索引):

CREATE TABLE mytable ( name VARCHAR(32) , INDEX index_mytable_name (name) );

CREATE INDEX創建方式(建表後,添加索引):

CREATE INDEX index_mytable_name ON mytable(name);

ALTER TABLE創建方式(修改表結構時,添加索引):

ALTER TABLE mytable ADD INDEX index_mytable_name (name);

此外⚠️:還有一種叫複合索引,就是爲多個字段添加一個索引,下面也會專門提到。

 

組合(複合)索引(index):

指爲多個字段創建一個普通索引,只有在查詢條件中使用了創建索引時的第一個字段,索引纔會被使用。使用組合索引時遵循最左前綴原則(對於最左前綴可查看這篇文章:https://blog.csdn.net/With_Her/article/details/104394606)。

CREATE TABLE創建方式(建表時,添加索引):

CREATE TABLE mytable ( `id` int(11) , `name` VARCHAR(32) , INDEX index_mytable_id_name (`id`,`name`) );

CREATE INDEX創建方式(建表後,添加索引):

CREATE INDEX index_mytable_id_name ON mytable(id,name);

ALTER TABLE創建方式(修改表結構時,添加索引):

ALTER TABLE mytable ADD INDEX index_mytable_id_name (id,name);

唯一索引(unique):

其作用與普通索引類似

特性:

  1. 索引列的值必須唯一
  2. 但可以爲空
  3. 如果是組合索引,則列值的組合必須唯一

CREATE TABLE創建方式(建表時,添加索引):

CREATE TABLE mytable ( `name` VARCHAR(32) , UNIQUE index_unique_mytable_name (`name`) );

CREATE UNIQUE創建方式(建表後,添加索引):

CREATE UNIQUE INDEX index_mytable_name ON mytable(name);

ALTER TABLE創建方式(修改表結構時,添加索引):

ALTER TABLE mytable ADD UNIQUE INDEX index_mytable_name (name);

⚠️:如果是字符串字段,還可以指定索引的長度,在列命令後面加上索引長度就可以了

 

主鍵索引:

 

見名知意,就是我們在爲表創建主鍵時,會自動爲主鍵添加的索引——主鍵索引。

特性:

  1. 不可以爲空
  2. 一個表中只有一個主鍵索引
  3. 是一種特殊的唯一索引
  4. CREATE INDEX方式不能創建主鍵索引,CREATE TABLE、 ALTER TABLE方式可以創建索引

CREATE TABLE創建方式(建表時,添加主鍵):

CREATE TABLE mytable ( `id` int(11) NOT NULL AUTO_INCREMENT , `name` VARCHAR(32) , PRIMARY KEY (`id`) );

ALTER TABLE創建(修改表結構時,添加主鍵):

ALTER TABLE mytable ADD CONSTRAINT t1_pk PRIMARY KEY (id);

⚠️:如果是字符串字段,還可以指定索引的長度,在列命令後面加上索引長度就可以了(例如:name(11))

未完待續....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章