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))

未完待续....

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