Mysql SQL优化

SQL优化规则

第一条:

尽量全值匹配,也就是说尽量使用等于

第二条:

最佳左前缀原则

如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列

如果是按顺序使用的索引列,且有最左侧的列,索引列完全有效

如果使用了最左侧的列中间跳过第二列或其他列接着使用,一旦跳过,之后的列索引不生效,俗称部分失效

如果没有使用最左侧的列,索引完全失效

第三条:

不在索引列上做任何操作

不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

第四条:

范围条件放在最后

中间有范围查询会导致后面的索引列全部失效,但是本身是有效的

第五条:

尽量使用覆盖索引

尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *

第六条:

尽量不使用不等于

mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描

当然,如果使用了覆盖索引,索引还是可以用的,如果一定要使用不等于,尽量使用覆盖索引

第七条:

Null/Not Null有影响

注意null/not null对索引的可能影响

在字段为not null的情况下,使用is null 或 is not null 会导致索引失效

解决方式:覆盖索引

EXPLAIN select  name,age,pos from staffs where name is not null

在字段为null或者未定义的情况下

Is not null 的情况会导致索引失效

解决方式:覆盖索引

EXPLAIN select  name,age,pos from staffs where name is not null

第八条:

使用like的注意事项

like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作

解决方式:覆盖索引

EXPLAIN select name,age,pos from staffs where name like '%july%'

第九条:

字符串类型加引号

字符串不加单引号索引失效

解决方式:请加引号【捂脸】

第十条:

OR改 UNION效率高

这个SQL还是贴出来吧,不然难理解

EXPLAIN

select * from staffs where name='July' or name = 'z3'

EXPLAIN

select * from staffs where name='July'

UNION

select * from staffs where  name = 'z3'

解决方式:覆盖索引

EXPLAIN

select name,age from staffs where name='July' or name = 'z3'

总共十条,居然还有人写成了诗,墙都不扶,就服你

全值匹配我最爱,最左前缀要遵守

带头大哥不能死,中间兄弟不能断

索引列上少计算,范围之后全失效

LIKE百分写最右,覆盖索引不写*

不等空值还有OR,,索引影响要注意

字符引号不能丢,SQL优化有诀窍

听着还挺带劲

最后附上习题一部,不发答案,大家自己瞅瞅,可以答案写评论区,我是全猜对了,你呢

作者:彼岸舞

时间:2020\07\11

内容关于:Mysql

本文来源于网络,只做技术分享,一概不负任何责任

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql索引

    Mysql官方对索引的定义为:索引(index)是帮助Mysql高效获取数据的数据结构。

    彼岸舞
  • Java API 代码操作ElasticSearch7.6.1(1)

    彼岸舞
  • Mysql执行计划(大章)

    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或者表结构的性能瓶颈

    彼岸舞
  • Elasticsearch 索引生命周期管理详解与实践汇总篇

    Elasticsearch 从版本6.8开始已经免费开放索引生命周期管理的功能,通过该功能我们可以实现日志索引不同阶段的细化管理进而达到实际需求。本文基于以往的...

    南非骆驼说大数据
  • 面试官:谈谈你对mysql索引的认识?

    其实这下面每个问题,我都可以讲一篇文章出来!而且这些问题,不是我凭空编的。如下图所示(注意看第三题)

    乔戈里
  • MySql学习笔记(二)- 索引的设计和使用

    作为开发人员,数据库的索引是我们再熟悉不过的了。那么实话真的会了吗,在项目开发中随便定义一个int、varchar后边跟个primary key或者加个inde...

    程序员_备忘录
  • MySQL性能优化(三):索引

    如果一本新华字典假如没有目录,想要查找某个字,就不得不从第一页开始查找,一直找到最后一页(如果要找的字在最后一页),这个过程非常耗时,这种场景相当于数据库中的全...

    码农架构
  • MySQL系列 | 索引数据结构大全

    对于二叉树而言,每个节点只能有两个子节点,如果是一颗单边二叉树,查询某个节点的次数与节点所处的高度相同,时间复杂度为 O(n);如果是一颗平衡二叉树,查找效率高...

    Tinywan
  • 图解 MySQL 索引,写得实在太好了!

    www.cnblogs.com/wyc1994666/p/10831039.html

    Java技术栈
  • 2020数据库最新面试题常考汇总

    主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。

    宇宙之一粟

扫码关注云+社区

领取腾讯云代金券