热门标签 | 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。


推荐阅读
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
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社区 版权所有