SonarQube搭建手记dnf辅助

基于MySQL 的 SQL 优化总结

在数据库运维过程中,优化 SQL 是 DBA 团队的一样平常义务。例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率。

现在常用的 SQL 优化方式包罗但不限于:营业层优化、SQL 逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而到达 SQL 优化的目的。索引优化往往可以在短时间内发生异常伟大的效果。

--- 来自美团手艺团队

SQL 优化是一个庞大的问题,差别版本和种类的数据库、差别数据级的数据需要选择差其余优化计谋。

说明:我这里简朴总结一下 SQL 优化,许多的大佬写过这方面的细节和用法,甚至另有相关的案例。我只是作为一个阶段性的总结,一定是不全面的。若有错误和不当之处,迎接批评指正,不胜感激。

从一样平常开发写 SQL 的角度看,需要遵照一些规则,然则这些规则只能解决部门问题。由于随着开发和数据量的增进,SQL 照样会变慢,这个时刻需要一些针对性的措施,好比针对性地添加索引,通过下令或者工具剖析变慢的 SQL 等等。

说说 SQL 优化的其中两个大的原则(一定另有其余):

原则一:只管制止全表扫描。

原则二:通过索引优化。

这两个涉及的点对照多,他们之间也是有联系的,下面详细说说。

1、制止全表扫描

为啥要制止全表扫描呢?由于全表扫描花费更多的时间。

那么从哪些方式制止全表扫描呢?

对 where 和 order by 涉及的列确立索引可以提高接见速率。然则要注重,并不是你确立了索引,索引就一定会生效。若是没有生效查询时照样全表扫描,速率照样得不到提升。那若何判断索引没有生效呢?可以借助 explain SQL 语句的效果判断。大佬写的MySQL EXPLAIN 下令: 查看查询执行计划中总结了用法。简朴的说,使用该下令剖析的效果中许多字段,其中type 形貌了查询的方式,若是 type 的效果是ALL,那么索引一定没起作用。下面总结一下若何制止索引失效。

1、制止在 where 子句中对字段举行 null 判断

select id from user where name is null

2、制止在 where 子句使用 != 或者 <>

3、制止在 where 子句中对表达式举行操作

select id from user where age/2 = 20

修改为:

select id from user where age = 20 * 2

4、制止在 where 子句中对字段举行函数操作

5、制止在 like 查询中将 %放在开头

select id from user where username like '%wh'

2、索引优化

适当地添加索引可以提高 SQL 的速率,但也有些注重点。

1、使用团结索引时,注重索引列的顺序,一样平常遵照最左匹配原则

好比一个索引:

KEY `idx_userid_age` (`userId`, `age`) USING BTREE

相符最左匹配原则的写法是把userid放在前面

select userid, name from user where userid = 1001 and age = 10

当我们建立的这个团结索引,就相当于建立了(userid)和(userid, age)两个索引。团结索引不满足最左原则,一样平常会失效,然则这个还跟 MySQL 优化器有关系。

2、在适当的时刻,使用笼罩索引

通常在使用索引检索数据之后,需要接见磁盘上数据表文件读取所需要的列,这种操作成为“回表”。

若索引中包罗查询的所有列,则不需要回表操作,直接从索引文件中读取数据即可,这种索引成为“笼罩索引”。,pubg辅助,

在查询时只管削减select *,只查询需要的行,条件允许时只管确立笼罩索引。

3、删除冗余索引

索引并不是越多越好,冗余的索引会影响性能。

好比,索引(A, B)相当于建立了索引(A)和索引(A, B)。

4、注重索引的数目

索引不是越多越好,一样平常不要跨越 5 个。索引虽然提高了查询效率,然则也会降低插入和更新的效率。插入或更新可能会重修索引,索引确立索引也需要慎重思量。

5、索引不适合确立在有大量重复的字段上,如性别这类字段

3、其他

其他原则包罗但不限于:

1、查询 SQL 只管不要使用 select *,而是 select 某字段。

2、连表查询的时刻只管将数据量少的表驱动数据多的表。

3、若是插入的数据较多时,思量批量插入。

4、原则上不要有跨越 5 张以上的表毗邻

阿里巴巴开发手册中划定跨越三个表克制 join的,然则这些规范的适用性照样要思量环境。当连表数目较少时,连表路径算法选择的是动态规划算法;然则连表太多的情况下,路径算法可能退化成贪心算法,连表的方案可能不是最优的的。

这种情况下,若何写 SQL 呢?谜底是通过可以通过冗余实现,细节就不睁开了。

4、通过工具剖析 SQL

说说几个用到的 SQL 剖析工具

4.1 MySQL 自带的慢查询日志

MySQL 的慢查询日志是 MySQL 提供的一种日志,纪录,用于纪录在 MySQL 中响应时间跨越设定的阈值的语句。在 MySQL 的配置文件 my.ini中开启后,支持将慢查询日志写入文件或者数据库。通过explain关键词模拟优化器执行 SQL,剖析慢查询 SQL。

剖析相关语句使用了哪些表、毗邻的类型、扫描的行数、使用的索引等。

4.2 日志剖析工具 MySQLdumpslow

在生产环境中,手工剖析日志、查找 SQL 对照费时间。MySQL 提供的 MySQLdumpslow 工具可以获得一些 SQL 接见的统计数据,好比接见次数最多的 10 条 SQL 等。

4.3 第三方工具:美团手艺团队的 SQLAdvisor

由美团手艺团队维护的一个开源的剖析 SQL,给出索引优化建议的工具。

只是也许做了个总结,细节都没有睁开,有兴趣的同砚自行学习吧。

参考文章:

STM32学习笔记——USART

方舟生存进化mysql_基于MySQL 的 SQL 优化总结_卡盟,辅助相关推荐

  1. 方舟生存进化mysql_【游戏】《方舟生存进化》怎么联机 搭建服务器联机教程

    想玩下<方舟生存进化>,跟小伙伴们一起 和小伙伴们一起联机打恐龙,是该有多爽!<方舟生存进化>是一款题材十分新颖的沙盒生存游戏,那么方舟生存进化怎么联机?下面为大家介绍< ...

  2. 方舟生存进化mysql_宝宝学英语abcdefg

    宝宝学英语abcdefg是一款早教类的软件,宝宝学英语abcdefg专注于宝宝的英语知识学习,通过宝宝学英语abcdefg宝贝可以更好的学习英文字母和相关内容. 功能介绍 宝宝学英语abcdefg是一 ...

  3. 【MySQL】基于MySQL的SQL优化(二)——对count()、max()的优化

    *本文章使用数据均来自MySQL样本数据库Sakila,参考:https://blog.csdn.net/tanglei6636/article/details/93042010 max(): 通过一 ...

  4. 方舟手游pvp服务器修改pvx,方舟生存进化手机版怎么玩pvx_方舟生存进化手机版pvx玩法规则介绍_好特网...

    pvx服务器与玩法规则解析 目前PVX服务器还处于内测阶段,按官方惯例,每10天左右一次更新,所以较大可能是在8月8日放出,也不排除跳票的可能,毕竟BUG太多. 然后何为PVX,这个大家看下图,然后在 ...

  5. 方舟无限琥珀服务器,方舟生存进化无限琥珀版

    方舟生存进化无限琥珀版是一款自由度非常高的沙盒类游戏.方舟生存进化无限琥珀版支持联机玩法,在这里,你需要了解并掌握更多不同类型的恐龙信息,并让他成为自己最有力的帮手来和自己并肩作战,统治整个森林.下载 ...

  6. 方舟生存进化服务器修改代码,方舟生存进化服务器代码怎么使用

    2 回答 ark方舟生存进化怎么进服务器? 目前有些不少的游戏是不支援中文路径的,因此,不要把游戏放在含有中文的目录文件夹当中.那样会导致游戏打不开,或者卡在初始界面.执行游戏之前,先去游戏目录下_C ...

  7. 方舟服务器建家位置,《方舟 生存进化》最佳建家位置,新手玩家根本无法想象!...

    <方舟 生存进化>的老玩家都知道,如果要建家,选址是相当重要的,你总不想第二天发现,自己辛辛苦苦建造的房子就变成了一堆废墟了吧,所以在方舟中选址也是极为重要的,在这里我们就围绕方舟中的'中 ...

  8. 方舟服务器制作修改,ARK方舟:生存进化服务器禁止物品制造的修改方法

    ARK方舟:生存进化服务器禁止物品制造的修改方法 代码对应的文件目录: 文件:Game.ini 框架:[/script/shootergame.shootergamemode] 例如禁用C4遥控器代码 ...

  9. 方舟手游服务器受人无限物资,方舟生存进化BUG无限刷物资方法 | 手游网游页游攻略大全...

    发布时间:2015-10-23 壳是铁房子必须的材料,今天小编为大家带来一天1000壳的方法,不过高收益伴随着高风险,大家一定要小心,来看这篇熔岩洞生存攻略以及刷壳方法把. 右下角坐标(75 85 . ...

  10. 方舟服务器维护驯龙,方舟生存进化新手图文攻略 最详细的驯龙教程方法

    <方舟:生存进化>很多新手玩家不知道前期如何生存,不知道有什么技巧,下面小编就为大家带来方舟生存进化的图文攻略,也就是新手图文攻略教程,希望对想要接触或这刚刚接触这款游戏的玩家有所帮助. ...

最新文章

  1. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)
  2. matlab中如何读取TXT数据文件中指定行的数据
  3. vb.net 机器学习-候选消除法
  4. 题目:[NOIP2008]火柴棒等式
  5. Mac OS X snow leopard 10.6 VMware安装
  6. mysql查询网址_bootstrap+flask+mysql实现网站查询
  7. 数位dp从会打模板到不会打模板
  8. Linux实验四:编译和调试工具的使用
  9. 我想自学编程技术,但是每天下班回来都很累了,没力气,怎么办?
  10. web网络图片查看器Android
  11. 怎么求平均数_小学奥数知识点趣味学习——平均数问题
  12. 110kv/35kv变电所无功补偿技术的研究+matlab仿真模型
  13. C语言设计模式——简单工厂模式
  14. 深圳学校积分计算机,深圳积分入户初级计算机证书,居然也能积这么多分!
  15. win10文件后缀名怎么显示_Win10显示隐藏文件后系统根目录( C盘)文件及文件夹的作用...
  16. 年已过,新的一年如何过?
  17. 【Redis学习05】优惠券秒杀及其优化
  18. MCE公司:PROTAC 技术靶向降解 BTK
  19. centos 6.7 GRUB配置
  20. 餐厅点餐系统需求分析

热门文章

  1. 帧数测试软件苹果,如何监视FPS(每秒帧数)在Mac OS X中进行石英调试 | MOS86
  2. AI智能电话机器人源码搭建揭秘!语音机器人电销机器人源码系统那些事
  3. NumPy常用中文手册
  4. Java面试题内容聚合
  5. Vulkan教程翻译
  6. 数据结构折半查找例题_查找-第9章-《数据结构题集》习题解析-严蔚敏吴伟民版...
  7. 【硬缸·EP2.0】MOSFET的特性与选择
  8. readelf 显示文件完整段表
  9. 如何将pdf文件转换成可以编辑的文档
  10. 2021年BATJ30套大厂Android经典高频面试题,附答案