关闭

高性能MYSQL(查询优化)

标签: mysql数据库
272人阅读 评论(0) 收藏 举报
分类:

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

慢查询基础:优化数据访问
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

0
0
查看评论

【高性能MySQL】读书摘录5-第6章、查询性能优化

第6章、查询性能优化 1、慢查询基础:优化数据访问 查询性能低下的最基本的原因是访问的数据太多,对于低效的查询,可以从下面两个步骤来分析: (1)、确认应用程序是否在检索大量超过需要的行,这通常意味着访问了太多的行,但有时候也有可能访问了太多的列。 (2)、确认MySQL服务器层是否在分析大量超过需...
  • ohmygirl
  • ohmygirl
  • 2015-04-26 16:28
  • 1474

高性能MySQL - 查询性能优化

本文来源 《高性能MySQL》 一、如何检查一个查询的好坏 查询性能低下最基本的原因是访问的数据太多。造成低效查询的原因有以下两个: 1. 检索大量不需要的数据。 2. MySQL服务层在分析大量超过需要的数据行。 1. 检索大量不需要的数据 1.1 查询不需要的记录 一个常见的错误是误以为My...
  • Return_True_hang
  • Return_True_hang
  • 2017-03-27 21:52
  • 286

《高性能MySQL》读书笔记--查询性能优化

对于高性能数据库操作,只靠设计最优的库表结构、建立最好的索引是不够的,还需要合理的设计查询。如果查询写得很糟糕,即使库表结构再合理、索引再合适,也无法实现高性能。查询优化、索引优化、库表结构优化需要齐头并进,一个不落。6.1 为什么查询速度会慢通常来说,查询的生命周期大致可以按照顺序来看:从客户端&...
  • xifeijian
  • xifeijian
  • 2015-05-09 20:34
  • 8501

高性能MySql设计之查询优化(limit优化)

1        介绍 1.1     处理流程 当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树...
  • caomiao2006
  • caomiao2006
  • 2016-08-14 15:37
  • 3441

Explain详述(Sql查询优化器) -Mysql深化学习-持续更新

MySql 深化学习 1 explain用法 explain可以帮助我们分析select语句,找出select语句的瓶颈,从而可以针对性地去做优化,让MySQL查询优化器更好地工作。 MySQL查询优化器有几个目标,其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数...
  • qq_31159377
  • qq_31159377
  • 2016-07-10 23:58
  • 846

[高性能MySQL]-特定类型查询的优化

这一节主要是对于一些特定类型的优化查询: (1)count查询优化; (2)关联查询 (3)子查询 (4)GROUP BY 和 DISTINCT优化 (5)LIMIT 分页优化 count查询优化COUNT()聚合函数的作用: (1)统计某一个列值的数量,也可以统计行...
  • u010853261
  • u010853261
  • 2017-02-28 11:33
  • 273

MySQL数据库优化(五)——MySQL查询优化

一、mysql查询类型(默认查询出所有数据列) 1、内连接       默认多表关联查询方式,查询出两个表中所有字段;可省略inner join 关键字 2、外连接 查询出某一张表中的所有数据 (1)左连接       ...
  • Daybreak1209
  • Daybreak1209
  • 2016-06-11 21:30
  • 2014

【高性能MySQL】查询优化

合理的表结构、索引对于高性能查询来说是必不可少的。但是还需要合理的设计查询。如果查询写的很糟糕,那么表结构再合理、索引再合适,也无法实现高性能。 因此高性能的查询依赖于这三点:查询优化、索引优化、表结构优化。 为什么查询速度会变慢 如果把查询看作是一个任务。那么它由一些列子任务组成,每个子任务都会消...
  • sinat_35608637
  • sinat_35608637
  • 2017-06-26 09:27
  • 178

mysql联合查询分析及优化

最近在做报表,跟数据库打交道的比较多,所以特意来总结一下mysql的联合查询; 查询常用的字句     where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(分页)、USING(取交集) 1、where常用运算符: 一...
  • liaodehong
  • liaodehong
  • 2016-05-11 11:36
  • 1680

Mysql查询优化器

Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率。那么到底mysql到底能进行哪些优化那,下面通过以下几个方面来探讨一下: 1   ...
  • caomiao2006
  • caomiao2006
  • 2016-08-14 15:31
  • 389
    个人资料
    • 访问:25982次
    • 积分:1170
    • 等级:
    • 排名:千里之外
    • 原创:95篇
    • 转载:21篇
    • 译文:0篇
    • 评论:1条
    文章分类