mysql查询过程:
  1. 客户端发送查询请求。
  2. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行。
  3. 服务器进行sql解析,预处理,再由优化器生成执行计划。
  4. Mysql调用存储引擎API执行优化器生成的执行计划进行查询。
  5. 返回结果。

优化数据访问:
  1. 只获取必要的数据:

    • 是否查询了多余的记录;
    • 多表关联时是否返回了全部列;
    • 是否总是取出全部列(避免select *);
    • 是否重复查询相同的数据(缓存代替)。
  2. 避免额外的记录扫描:查询开销衡量标准(响应时间、扫描行数、返回行数)
    • 响应时间:服务时间(执行查询)+排队时间(IO或者等待资源、锁等);快速上线估计法。
    • 扫描的行数和返回的行数:一般1:1-->1:10。
    • 扫描行数和访问类型:同一行数据的不同访问方式(扫描表、索引、范围访问、唯一索引、常熟引用、单值访问)的扫描行数的差异,通常增加索引是一个最直接的方法。大量扫描返回少量行数的查询优化技巧:
      • 使用索引覆盖扫描:把所有需要的列放到索引中,存储引擎无需回表获取对应的行,直接返回结果。
      • 改变库表结构:增加汇总性表存储,空间换时间,效率。
      • 重写查询:sql结构。
重构查询方式:
  1. 复杂查询与简单查询的选择:复杂查询考虑的是网络通信,查询解析及优化的因素。将复杂查询分解为多个组合的简单查询有时会是不错的选择。
  2. 切分查询:将大查询切分为多个相同的小查询。例如:删除旧数据时。
  3. 分解关联查询:将分解的单个查询在应用层进行整合。
    • 增加缓存效率:应用服务通常需要缓存常用单表查询,重复利用。
    • 分解的单个查询可以减少锁的竞争。
    • 应用层进行关联,使得数据库拆分更加容易,构建高性能及高扩展性的程序、服务。
    • 查询效率的提升。
    • 减少冗余记录的查询。
    • 应用层的哈希关联效率高于mysql的循环嵌套关联。

特殊优化:

  1. count(*) 并不是统计所有列,而是是统计行数。
  2. MyISAM的count()在没有where条件的时非常快,优于其它引擎。
  3. 快速、精确、实现简单 只能满足其二。
  4. 优化关联查询:
    • 确保ON或者USING子句中的列上有索引。在创建索引时要考虑关联的顺序,一般来说,除非有其它理由,否则只需要在管理按顺序中的第二表的相应列上创建索引。
    • 确保任何的GROUP BY和ORDER BY中的表达式只涉及到一个表中的列,这样Mysql才能使用索引来优化过程。
    • 升级Mysql需要检查优化。
  5. 5.6之前尽可能使用关联查询代替子查询。
  6. UNION查询:Mysql通过创建填充临时表的方式来执行。

mysql查询性能优化的更多相关文章

  1. MySQL查询性能优化(精)

    MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...

  2. 170727、MySQL查询性能优化

    MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...

  3. 到底该不该使用存储过程 MySQL查询性能优化一则

    到底该不该使用存储过程   看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...

  4. MySQL查询性能优化七种武器之索引下推

    前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种武器之索引潜水 MySQL查询性能优化七种武器之链路追踪 今天要讲的是MySQL的另一种查询性能优化方式 ...

  5. MySQL优化技巧之五(mysql查询性能优化)

    对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...

  6. MySQL查询性能优化---高性能(二)

    转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...

  7. 《高性能MySQL》之MySQL查询性能优化

    为什么查询会慢? 响应时间过长.如果把查询看做是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数, ...

  8. MySQl 查询性能优化相关

    0. 1.参考 提升网站访问速度的 SQL 查询优化技巧 缓存一切数据,读取内存而不是硬盘IO 如果你的服务器默认情况下没有使用MySQL查询缓存,那么你应该开启缓存.开启缓存意味着MySQL 会把所 ...

  9. Mysql 查询性能优化

    查询优化,索引优化,库表结构优化需要齐头并进,一个不能落. 为什么查询速度会慢 在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间.如果把查询看做是一个任务的话,那么它由一系列子任务构成,每 ...

随机推荐

  1. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  2. ifconfig: command not found(CentOS专版,其他的可以参考)

    ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理

    系列目录 前言 本节主要是关注者(即用户)和用户组的管理,微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号也提供了相应的接口 ...

  4. 算法与数据结构(十四) 堆排序 (Swift 3.0版)

    上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...

  5. Dropzone.js实现文件拖拽上传

    dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 使用Dropzo ...

  6. H3 BPM让天下没有难用的流程之技术体系

    一.技术架构 H3 BPM 基于微软.NET 技术架构,采用C#语言开发,以高开放.高扩展.高性能为核心准则,遵循分层的设计原理,结合最新的B/S 以及智能手机应用开发技术研发的. 图:H3 BPM  ...

  7. MySQL常用命令

    数据库登陆命令: mysql -uroot -p 2.提示输入密码: 3.登陆成功: 4.数据库修改相关命令: 修改数据库的编码格式: 语法格式为:ALTER {DATABASE|SCHEMA}  [ ...

  8. 解决开启服务器防火墙导致ftp不能连接的问题

    在防火墙设置的"高级"选项卡中的"网络连接设置"--"本地连接"--"设置"中添加了"FTP服务器" ...

  9. ELK分析IIS日志

      LogStash.conf input { file { type => "iis_log" path => ["C:/inetpub/logs/LogF ...

  10. JBPM

    JBPM简介 什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩 ...