sql优化之索引

  • 本人为入坑一年多的职业摸鱼爱好者,近期公司项目的查询速度实在是感人,估计也是自己开发时没有在意这方面的问题,所以近期自学sql优化,听了些课,查了些资料,为系统速度踩一脚油门,简单总结一下最近所学,sql优化本身便是一门技能,以下皆为初学所感,有问题请评论区批评指正

1. 索引

  • 索引是什么?有什么作用?

    • 数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。
    • 索引其实就是排好序的快速查找的数据结构
    • 作用:使用索引可以快速访问数据库表中的特定信息,即加速检索表中的数据
  • 这么一说是不是对索引有了比较直观的认识呢?其重要性可见一斑!当对索引有了初步的认识后,怎么用索引来达到速度优化的效果便是第一课了。

添加索引

  • 单值索引:ALTER TABLE table_name ADD INDEX index_name ( column )
  • 多值索引:ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

以上是以命令的形式添加索引,若是用 Navicat premium 这种可视化的数据库管理工具会更方便,如图:
在这里插入图片描述
为数据表中添加了某个索引,当再去查询此表时,以索引值为查询条件,便可更快速的检索表中的数据,而不用全表检索了。举个例子:

  • 没有索引的查询
EXPLAIN SELECT * FROM `rbac_user` WHERE fid = 'F000015' and login_name = 'bin';

(不知道EXPLAIN用法的小伙伴请关注下篇文章,会有专题讲解哦)

  • 无索引的查询结果
    在这里插入图片描述
    可以发现,当前的查询是全表扫描,此表是测试用的,故数据量不大,查询速度不会受到多少影响,可如果是生产数据库呢,查询百万级的数据如果没有索引,效率可想而知…

  • 添加多值索引后查询
    添加多值索引

  • 有索引的查询结果
    在这里插入图片描述
    不难发现,添加索引后扫描的数据行数为1,也就是说只查询了一行数据,与无索引的全表查询相比呢,若是数据量庞大的话,相比速度也可想而知了。

有无索引

  • 当定位到某条sql语句后,若是因为索引带来的效率低,便可从中找寻原因
  1. 无索引,那就添加相应的索引(即为经常用到的查询条件添加为索引)
  2. 有索引但是索引失效了,那就跟着我一起找一找,索引为什么会失效

索引失效

  • 索引失效便意味着mysql进行数据检索的时候放弃了对索引列的查询,这样或多或少的会加重数据检索的压力,那么索引为什么会失效呢?我们一起来看看
  1. 查询要从索引的最左侧开始,并且不可以跳过中间索引值
  2. 不要再查询语句中的索引列做任何操作(加减乘除,包括mysql内置函数)
  3. 条件中某索引为范围查找的话,其后的索引会失效(例:age>15)
  4. 查询的字段尽量覆盖索引,尽量不用select *
  5. 条件中使用不等于(!=或<>)会索引失效
  6. is null 和 is not null 也会造成索引失效
  7. 模糊查询(%)百分号应尽量放在最右侧,放左侧会造成索引失效
  8. 字符串不加单引号(’’)会引起索引失效
  9. 用or来连接条件判断时会索引失效

以上就是大致产生索引失效的原因,大家可自行测试哦 ,找到原因我们就可以对sql进行初步优化处理了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临渊羡鱼罢了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值