MYSQL优化杂谈二,Query优化

Query 优化基本思路

  • 优化更需要优化的Query,什么语句更需要优化?
1.优化一个高并发Query比一个低并发的Query收益要大很多;
例子:
    比如一个一小时执行1w次,每次需耗20次IO;另外一个每小时执行20次,每次需要10000个IO;
    同样优化节省20000次IO,对于前一个来说每次优化时只需要降低2个IO值便可;
    但对于后者,平均每次需要降低1000个;相比较前者优化来得容易得多;

2.一个频繁执行的高并发Query的危险性比一个低并发的Query要大很多;
当一个低并发的Query走错执行计划,所带来的影响只是该Query的请求者的体验会变差,对整个系统的影响不会特别突出,至少还在可控范围;
(当然了,如果是使用了复杂join语句造成大量锁表操作就另当别论了~);
但是当一个高并发的Query走错了执行计划,可能带来灾难性的后果,很多时候连自救的机会都不给你就让整个系统Crash掉;
  • 定位优化对象的性能瓶颈;
优化要明确Query语句有什么问题,我为什么要优化它?
拿到需要优化的Query语句后,我们首先要判断这个Query的瓶颈到底是IO还是CPU?
到底是因为数据访问耗时太多,还是在数据运算(分组排序)?
  • 明确的优化目标;
做事情都要有目标,没有目的没完没了的优化也不行;
通常情况下,查询响应一般我会为自己设定查询优化响应时间来作为量化的目标;
比如,我最近在做的业务表优化,优化目标就是:百万级至至千万级数据优化单表聚合查询响应时间保持的200ms左右;
  • 从Explain入手;
Explain是用来获取一个Query在当前的数据库中的执行计划,但在查看Explain结果之前,作为Query优化人员,应该要有一个
清晰的目标执行计划‘

Query 优化基本原则:

  • 多使用profile;
Query Profiler是一个非常方便的Query诊断分析工具,通过该工具可以获取一条Query在整个执行过程中对中资源的消耗情况;

1.开启profiling参数:
  >set profiling=1;

2.执行Query:
  >select  count(*) from users;

3.获取系统中保存的所有Query的profile概要信息:
  >show profiles;

4.针对单个Query获取详细的profile信息,比如查看Query_ID为4的数据:
  >show profile cpu,block io for query 4;


  • 永远用小结果集驱动大的结果集;
mysql中的join只有一种实现方式:Nested Loop,即:嵌套循环来实现的;
驱动表的结果集越大,被驱动表的访问次数增加,IO总量及CPU运算次数也随即上升;
减少驱动表的结果集,从而减少IO总量及CPU运算总量
  • 尽可能在索引中完成排序;
  • 只取出自己需要的Columns;
减少Columns数量可以减少传输数据量,如果需要涉及排序,可以减少数据在排序区占用的内存空间
  • 仅仅使用最有效的过滤条件;
最有效的过滤条件可以减少索引所占用的存储空间;
  • 尽可能避免复杂的Join和子查询
Join语句:
mysql在并发性的处理上并不是太好,当并发量太高的时候,系统整体性能可能会急剧下降;
尤其是遇到一些较为复杂的Query的时候更是如此;
当出现复杂的join语句,就意味着需要锁定的资源也就多,所堵塞的其他线程也就多;
相反的,如果我们将比较复杂的Query语句拆成多个较为简单的Query语句分布执行,每次锁定的资源会少很多,
所堵塞的其他线程也要少一些;当然啦,整个查询的时间也会因此增长,这是一个取舍的过程;

子查询:
子查询通常很难得到一个很好的执行计划,很多时候命名有索引可以用,但是Query Optimizer就是不用;

对于复杂的Join和子查询的应用,明白其原理及可能造成的危害;在设计之时,有意识的规避及预估风险;
我也很反感为了优化而优化,为了吐槽而吐槽的行为;在曾经的团队里,笔者也遇到看到join语句就开始吐槽的同学;
毕竟优化本身就是一个系统性能,平衡决策的过程;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容