热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql5.6优化总结

https:www.parkjun.clubpost5前提:所有实验操作是基于mysql5.6,其他版本可能有差异,届时以具体的情况为准。

https://www.parkjun.club/post/5

前提:所有实验操作是基于mysql5.6,其他版本可能有差异,届时以具体的情况为准。

1、where后面的条件字段需添加索引,避免全表扫描。

2、连表查询时,关联字段需建立索引,并且应该保证关联字段的类型一致,避免类型转换。如: SELECT * FROM order_goods a INNER JOIN order_info b ON a.order_id = b.id 这个sql里面应该给order_id 建立索引,id字段是主键,自带索引。 但这个sql是不规范并且不被推荐的:order_id是varchar类型,id是 int类型,出现了类型转换。

3、索引过多会影响insert和update性能(这两个动作会重建索引),一般来说一张表索引数建议不要超过6个, 当然得根据实际的业务场景:比如你要优化的表平时做什么操作居多,是查询还是插入更新,查询的地方有效率要求没,插入更新的地方对及时 反馈有要求没等等。

4、用Navivat建索引时,索引方法不管你选啥,保存后展示给我们的都是btree,这个不用担心。Mysql会根据添加索引的字段类型自动适配合适的索引 方法:数字型的为btree,字符型的为hash。

5、不要建立联合索引,这种索引的使用场景有明显的局限性。

6、Where条件后面用不等于&#xff08;<>以及&#xff01;&#61;&#xff09;会造成条件字段索引失效&#xff0c;包含字符型和数字型。

7、对字符型字段使用<、<&#61;、>、>&#61;会造成索引失效&#xff0c;数字型字段则不会。

8、Between 对字符型字段使用会造成索引失效&#xff0c;数字型字段则会使用索引。

9、In、or 关键字是要使用索引的&#xff0c;请放心使用。

10、用or的地方尽量替换成union all&#xff0c;mysql查询引擎有相关优化。

11、Null值处理&#xff1a;对一个字段使用is null 进行判断&#xff0c;是会使用索引的&#xff0c;但是is not null 会造成索引失效&#xff0c;谨慎使用。

12、Like关键字&#xff1a;对数字类型的字段来说&#xff0c;只要使用like&#xff0c;均会造成索引失效。对字符类型的字段来说&#xff0c;field like ‘value%’这种写法会使用索引&#xff0c;其他写法均为造成索引失效。

13、不要在where 子句中的“&#61;”左边进行函数、算术运算或其他表达式运算&#xff0c;否则系统将可能无法正确使用索引。

如&#xff1a;select id from t where num/2&#61;100 select id from t where ifnull&#xff08;num&#xff0c;0&#xff09;&#61;0 这两个均会造成索引失效。

14、关键字order by 后面的字段不会使用索引&#xff0c;但是会消耗较多的cpu资源&#xff1b;数据量达到一定量级的时候会有很明显的延迟&#xff0c;尽量避免排序。

15、尽量避免 select *&#xff0c;这虽然不会对数据库造成很明显的性能压力&#xff0c;但会消耗大量的io。

16、尽量用 union all 代替 union&#xff1b; union 和 union all 的差异主要是前者需要将两个(或者多个)结果集合并后再进行唯一性过滤操作&#xff0c;这就会涉及到排序&#xff0c;增加大量的 CPU 运算&#xff0c;加大资源消耗及延迟。所以当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候&#xff0c;尽量使用 union all 而不是 union。

17、尽量提前过滤&#xff1b; &#xff08;1&#xff09;、在 SQL 编写中同样可以使用这一原则来优化一些 Join 的 SQL。比如我们在多个表进行分页数据查询的时候&#xff0c;我们最好是能够在一个表上先过滤好数据分好页&#xff0c;然后再用分好页的结果集与另外的表 Join&#xff0c;这样可以尽可能多的减少不必要的 IO 操作&#xff0c;大大节省 IO 操作所消耗的时间。 &#xff08;2&#xff09;、On条件的执行在where的执行之前&#xff1a;on 条件里先给出尽可能多的匹配满足条件:如下 select * from A inner join B on B.name &#61; A.name left join C on C.name &#61; B.name left join D on D.id &#61; C.id where C.status>1 and D.status&#61;1; 效率明显不如 select * from A inner join B on B.name &#61; A.name left join C on C.name &#61; B.name and C.status>1 left join D on D.id &#61; C.id and D.status&#61;1

18、正确理解left join、right join、inner join的区别&#xff0c;根据场景选择正确的连接方式。

外部连接有主表与从表&#xff0c;主表在left中是左侧表&#xff0c;right中是右侧表&#xff0c;主表数据会全部显示&#xff0c;从表数据则只显示关联部分匹配的数据&#xff0c;无匹配的数据用null补全。 内连接则只显示两表关联条件匹配的数据。

19、尽量少用或不用子查询&#xff0c;用其他方式代替。如 join、union等 &#xff08;因为一个子查询&#xff0c;mysql查询时候就会多建立一个零时表&#xff09;&#xff1b; 20、学会使用explain。


推荐阅读
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
author-avatar
HoerenRegen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有