前述:
一直都知道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):
其作用与普通索引类似
特性:
- 索引列的值必须唯一
- 但可以为空
- 如果是组合索引,则列值的组合必须唯一
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);
⚠️:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了
主键索引:
见名知意,就是我们在为表创建主键时,会自动为主键添加的索引——主键索引。
特性:
- 不可以为空
- 一个表中只有一个主键索引
- 是一种特殊的唯一索引
- 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))
未完待续....