MySQL索引的学习
此教程基于【编程不良人】这一次彻底搞定MySQL索引、从此不在恐惧面试,哔哩哔哩链接:https://www.bilibili.com/video/BV19y4y127h4?p=1
1.索引的介绍及分类
1.什么是索引 index
-官方定义:一种帮助mysql提高查询效率的数据结构
-索引的优点:
1.大大加快数据查询速度
-索引的缺点:
1.维护索引需要耗费数据库资源
2.索引需要占用磁盘空间
3.当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响
2、索引分类
-innoDB下:
主键索引
设定为主键后数据库会自动建立索引,创建的索引在innDB中为聚簇索引,主键索引的列值不允许存在null
单值索引(单列索引、普通索引)
即为非主键的列创建的索引,一个索引值包含单个列,一个表可以有多个单列索引,就是给一个表中的一个列添
唯一索引
索引的列的值必须唯一,但允许有空值 唯一索引索引的列值可以存在null,但是只能存在一个null
复合索引
即一个索引中包含多个列 ,一个索引不是由一个列决定的,而是由多个列的值决定的,如我们在查询的时候要查询多个字段,我们就可为要查询的多个字段创建一个复合索引,这样就可加快查询
(name age) index
-MyISAM下(mysql5.7之前额外拥有全文索引)
Full Text 全文索引(mysql5.7之前,只能用于MyISAM引擎,5.7之后可以用于innoDB)
全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找(类似于elasticsearch),允许在这些索引列 中插入重复值和空值。全文索引可以在char varchar Text类型列上创建,mysql5.7以前只MyISAM引擎支持全文索引
2.索引的基本操作
我们此处与Navicat
为例,新建一个数据库test,新建一个表user,
主键索引
create table user(id varchar(20) primary key,name varchar(20))
之后查看索引
show index from user
结果如下:
我们发现主键索引在建表时就已经创建(需指定主键)。
普通索引(单值索引、单列索引)
我们继续创建普通索引,普通索引的两种创建方式
1.建表之后创建索引,以下表示创建普通索引名字为name_index,为user表的name列
create index name_index on user(name)
2.建表时创建(key就代表索引),这种方式不能在创建时指定索引的名字,key(name)表示为name列创建普通索引
create table user1(id varchar