查询的生命周期:客户端到服务端,然后服务器上进行解析,生成执行计划,执行,返回结果给客户端。

慢查询基础:优化数据访问
1.是否想数据库请求了不需要的数据,尽量查询需要的数据,不要返回不需要的数据。
避免:查询所有的记录;多表关联时返回全部的列;总是取出全部列;重复查询相同的数据
2. Mysql是否在扫描额外的记录
衡量查询开销的指标:
1)响应时间:服务时间和排队时间。服务时间是指数据库处理这个查询真正花了多长时间;排队时间是指服务器因为等待这些资源而没有真正执行查询的时间。
2)扫描的行数
3)返回的行数

当发现查询需要扫描大量的数据但只返回少数的行,通常可以尝试以下方式:
1)使用索引覆盖扫描,把所有需要用到的列放到索引中,这样存储引擎无须回表获取对应行就可以返回结果。
**覆盖索引:**select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
2)改变数据库表结构,使用单独的汇总表。
3)重写这个复杂的查询。

重构查询方式

  1. 一个复杂查询还是多个简单查询:并不是mysql完成一个查询就好。现在mysql连接和断开连接都非常高效。
  2. 切分查询:将大查询切分成小查询
  3. 分解关联查询

Mysql客户端/服务器通信协议
Mysql客户端和服务端之间的通信协议是“半双工“,要么由服务器向客户端发送数据,要么由客户端向服务端发送数据,两则不能同时。

Mysql查询的过程
1.客户端发送一条查询给服务器;
2.服务器检查缓存,命中缓存返回;否则进入下一阶段
3.服务器进行sql解析、预处理、再由又花钱生成对应的执行计划
4.mysql根据又花钱生成的张子萱计划,调用存储引擎的api来执行查询
5.返回结果
查询状态
使用:select full processlist 可以查询mysql状态;
sleep;query:正在查询或者将结果发送给客户端; locked:现在正在等待表锁;
analyzing and statistics:线程正在收集存储引擎的统计信息,并生成查询的执行计划; copy to tmp table;sorting result;sending data

MySql的两种排序算法:
1.两次传输排序:读取行指针和需要排序的字段,对其进行排序,然后再根据排序结果读取所需要的数据行。(旧)
2.单次传输排序:先去去查询所需要的所有列,然后再根据给定列进行排序,最后自己返回排序结果。
具体的sql优化:http://blog.csdn.net/qq_23211905/article/details/72259034

使用MySql构建队列表
1.随着队列表越来越大和索引深度的增加,找到未处理记录的速度回随之变慢。将队列表分成两部分,将已处理记录归档或者存放到历史表,始终保证地理很小。
2.处理步骤:1.找到未处理的记录然后加锁;让现场一直阻塞直到满足两个条件中的一个:10000秒后超时;另一个线程使用kill query结束sleep。2.让消费者标记正在处理的记录,而不至于让多个消费者重复处理一个记录。
基础原则:1.尽量少做事。
2.尽可能快地完成需要做的事情,尽量使用update 代替select for update 在update

高性能MYSQL(查询优化)相关推荐

  1. 高性能mysql:创建高性能的索引

    2019独角兽企业重金招聘Python工程师标准>>> 索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对性能的影响愈 ...

  2. 读薄《高性能MySql》(四)查询性能优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  3. MySQL调优(五):MySQL查询优化分析

    查询慢的原因 优化数据访问 一个有趣的现象:如果可能的结果非常大的话,有可能就不用索引来排序了. 实际处理的时候,可能会有优化器对结果产生一些影响. <高性能MySQL>中说整体数据访问量 ...

  4. 高性能mysql 第六章_第六章 查询性能优化

    1. 为什么查询速度会慢 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化,无非是减少子任务数量,或者减少子任务的执行次数. 查询声明周期:生成计划,执行, ...

  5. 高性能MySQL——查询性能优化

    在数据库设计中,如果查询写得很糟糕,即使库表结构设计再合理,索引再合理也无法实现高性能. 1.优化数据访问 查询性能低下最基本的原因是访问的数据太多.对于低效的查询,通过以下两步来分析总是很有效: 确 ...

  6. 高性能MySQL(4)——查询性能优化

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

  7. 高性能MySQL(3)——创建高性能索引

    索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要. 一.索引的类型 在MySQL中,索引是在存储引擎层而不是服务器层实现的.所以没用统一的索引标准,不同存储引擎的索 ...

  8. 高性能MySQL(1)——MYSQL架构

    MySQL最重要.最与众不同的特性是它的存储引擎架构,这种架构将查询处理与数据的存储/提取相分离,使得可以在使用时根据不同的需求来选择数据存储的方式. 一.Mysql逻辑架构 如果能在头脑中构建出一幅 ...

  9. mysql count 1_高性能MySQL count(1)与count(*)的差别

    -------------------------------------------------------------------------------------------------第一篇 ...

  10. 读薄《高性能MySql》(三)索引优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

最新文章

  1. 安装很久_快看啦!吊轨推拉门安装图解在这里。
  2. python字典的setdefault方法和get方法
  3. JZOJ 3769. 【NOI2015模拟8.14】A+B
  4. mes如果本地没有权限
  5. 一起写框架-Ioc内核容器的实现-对象的调用-属性注入容器的对象(十)
  6. ENVI计算公式(一)
  7. LeetCode #43字符串相乘
  8. leetcode - 56. 合并区间
  9. iOS:copy的本质
  10. 【大话设计模式】模式二 :工厂模式
  11. iOS关于data.bin的文件的解析、存储、读取
  12. linux下安装weblogic出现的两个错误解决办法
  13. 空指针引用,导致linux内核panic(重启)
  14. Android Studio往模拟器添加音乐
  15. Web前端:中国环宇科技有限公司网页设计
  16. 数据库的学习MySQL
  17. Unity简单实现电量、充电状态显示
  18. HTAP混合事务/分析数据库调研
  19. 手把手学会 VS Code 快捷任务神技,成为项目组最靓的崽!
  20. 百度搜索URL参数你知道多少

热门文章

  1. TransE算法详解
  2. Word与Excel展示Oracle BI Publisher页签
  3. php官网软件下载,php下载_php官方下载_3DM软件
  4. 图像处理-色情图片识别(未完成)
  5. 华为模拟器linux,华为ENSP模拟器 官方安装版
  6. 高分屏更改Adobe Premier CC UI界面字体大小
  7. A题 血管机器人的订购与生物学习#2022年五一数学建模
  8. (售前)销售经理和产品经理的区别以及未来发展
  9. 计算机网络课程设计小型企业局域网的组建,计算机网络课程设计小型企业局域网的组建.doc...
  10. linux查看内存条pn,查看电脑内存条型号的两种方法【图文】