MySQL索引

零、引子

索引可以提高数据库性能。不用加内存,不用改程序,不用调slq,查询速度就可能提高百倍千倍

1.例子说明索引好处

在这里插入图片描述在这里插入图片描述
可以看到查询一条记录,耗时4.5s,时间比较长
通过sql命令创建一个索引

//ON emp(empno): 表示在emp表的empno列创建索引
CREATE INDEX empno_index ON emp(empno)

执行完,可以发现文件变大了

接着重新试一下执行查询指令

select * from emp where empno=1234568

在这里插入图片描述
效果非常恐怖,只有0.003sec

创建索引后,只对创建了索引的列有效

在这里插入图片描述

2.索引的原理

1. 没有索引为什么会慢

没有索引的话,查询会进行全表扫描
在这里插入图片描述

2. 使用索引为什么会快

形成一个索引的数据结构,比如二叉树,可以省略很多不必要的查询
在这里插入图片描述

3. 索引的代价

1.磁盘占用
2.对dml(update delete insert)语句的效率影响

如果对表进行dml(修改,删除,添加)会对表进行维护

4. 既然对dml有影响为什么还要用索引

dml(update delete insert)
在项目中,select占百分之90,dml占比不大,权衡之下利大于弊选择用索引

一、索引类型

1、主键索引

主键自动为主索引(类型Primary key)

create table t1(
	id int primary key, --主键,同时也是索引,称为主键索引
	name varchar(32)
);
create table t2(
	id int unique, -- id是惟一的,同时也是索引,称为unique索引
	name varchar(32)
);

2、唯一索引(UNIQUE)

3、普通索引(INDEX)

不唯一的字段一般用这个索引类型

4、全文索引

是什么:比如有一篇文章,里面有个电影,这个文章很大很长你想提高搜索效率就可以使用全文索引。

MySQL自带全文索引,但是一般不用
全文索引(FULLTEXT)[适用于MyISAM]

开发中考虑使用:全文搜索 Solr 和 ElasticSearch(ES)

二、创建索引

-- 查询表是否有索引
SHOW INDEXES FROM tb_books
-- 添加索引
-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON tb_books(id)
-- 添加普通索引
CREATE INDEX id_index2 ON tb_books(book_price)

-- 添加普通索引方式2
ALTER TABLE tb_books ADD INDEX id_index3 (book_price)

-- 添加主键索引
ALTER TABLE tb_books ADD PRIMARY KEY(ID)

三、删除索引

-- 删除索引
DROP INDEX id_index3 ON tb_books

四、规则

小结:哪些列上适合使用

  1. 较频繁的作为查询条件字段应该创建素引
    select*from empwhereempno=1
  2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
    select*from emp where sex =‘男’
  3. 更新非常频繁的字段不适合创建索引
    select*from emp where logincount = 1
  4. 不会出现在WHERE子句中字段不该创建素引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值