MySQL-常见索引及使用

一、认识索引

如果没有索引查询数据只能整表扫描,数据量大的时候速度很慢。通过建立索引,能够显著提升数据查询速度,这是索引最大的优点。但建立索引也会降低数据插入、删除、更新的速度,因为执行这些操作都需要维护更新索引。因此,索引适合建立在频繁查询的场景中。

二、常见索引类型

  • 主键索引(primary key):最多只有一个(可以是复合主键),值不能为空且不能重复

  • 唯一索引(unique):可以有多个,值不能重复

  • 普通索引(index):可以有多个,值允许重复

  • 全文索引(fulltext):用于大量文字字段的检索,要求使用MyISAM引擎,不支持中文

三、索引的底层实现

索引有hash索引和B+树索引,而MySQL索引的默认底层实现是B+树

hash索引和B+树索引的区别:

索引区别
Hash索引等值查询效率高,不能排序,不能进行范围查询,不支持模糊查询,查询性能不稳定
B+树索引数据有序,支持范围查询,查询性能稳定

四、索引的使用

1、创建索引:

(1)创建主键索引:

方式一:创建表的时候,直接在字段名后面指定primary key(以user表为例)

  • create table user(id int primary key),name(varchar(30));

方式二:在创建表的最后,指定某列或几列为主键索引

  • create table user(id int,name varchar(30),primary key(id));

方式三:创建表以后再添加主键

  • alter table user add primary key(id);

主键索引的特点:

  • 一个表中,最多有一个主键索引(可以是复合主键)

  • 主键索引的效率高(主键不可重复)

  • 创建主键索引的列,值不能为null,且不能重复

  • 主键索引的列基本都是int

(2)创建唯一索引:

方式一:在表定义时,在某列后面直接指定unique唯一属性

create table user(id int primary key,name varchar(30) unique)

方式二:在创建表时,在表的后面指定某列或几列为unique

create table user(id int primary key,name varchar(30),unique(name))

方式三:创建表以后再添加

alter table user add unique(name);

唯一索引的特点:

  • 一个表中,可以有多个唯一索引

  • 查询效率高

  • 如果在某一列建立唯一索引,必须保证这列不能有重复的数据

  • 如果一个唯一索引上指定not null,等价于主键索引。

(3)创建普通索引

第一种方式:表定义的时候  index(name)

第二种方式:表创建后添加  alter table user add index(name)

第三种方式:创建一个名为idx_name的索引

                      create index idx_name on user(name)

 普通索引特点:

  • 一个表中可以有多个普通索引,在实际开发中用的较多

  • 如果某列需要索引,但有重复的值,那么就用普通索引

(4)全文索引

全文索引要求存储引擎必须是MyISAM,而且默认的全文索引不支持中文。如果检索中文,使用sphinx的中文版coreseek.

来看一个例子:

使用下面的语句直接查询得到了结果:

使用explain命令分析发现上面语句并没有使用到索引:

那么索引到底应该该如何正确使用?

再通过explain命令查看发现这次使用了索引:

2、查询索引

  • show keys from 表名

  • show index from 表名

  • desc 表名

3、删除索引

  • 删除主键索引:alter table 表名 drop primary key

  • 删除其他索引:alter table 表名 drop index 索引名

  • drop index 索引名 on 表名

五、索引创建的原则

  • 比较频繁作为查询条件的字段应该创建索引

  • 唯一性太差的字段不适合单独创建索引

  • 更新频繁的字段不适合创建索引

  • 不会出现在where子句中的字段不该创建索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值