mysql查询性能优化.ppt
- 文档编号:26249604
- 上传时间:2023-06-17
- 格式:PPT
- 页数:26
- 大小:3.92MB
mysql查询性能优化.ppt
《mysql查询性能优化.ppt》由会员分享,可在线阅读,更多相关《mysql查询性能优化.ppt(26页珍藏版)》请在冰豆网上搜索。
MYSQL查询性能优化,为什么查询速度会慢,1,优化数据访问基础,2,重构查询的方式,3,查询执行的基础,4,目录,mysql查询优化器的局限性,5,优化特定类型的查询,6,andsoon.,7,结束,8,目录,为什么查询速度会慢?
1.查询速度最重要的参数是响应时间。
剖析mysql查询详见以后课时。
2.是否在检索大量超过需要的数据。
太多的行和太多的列。
3.mysql服务器是否在分析大量超过需要的数据行。
优化数据访问基础,设计合理的数据表结构:
适当的数据冗余对数据表建立合适有效的数据库索引数据查询:
编写简洁高效的SQL语句,mysql执行顺序:
(8)SELECT(9)DISTINCT(11)
(1)FROM(3)JOIN
(2)ON(4)WHERE(5)GROUPBY(6)WITHCUBE|ROLLUP(7)HAVING(10)ORDERBY,1.借助MySQLTuner配置mysql参数wgethttps:
/mysqltuner.plchmod+xmysqltuner.pl./mysqltuner.pl/Recommendations2.使用innoDB引擎代替MyISAM全文检索使用替代方案来避免通过数据库来查询,譬如借助第三方搜索工具。
重构查询的方式,1.切分查询大的语句一次性完成,可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。
切分可以尽可能小的影响mysql性能,减少mysql复制的延迟。
举例删除15年12月以前的消息,count(*)=300w:
deletefrommessagewhereadd_time0一次删除1w条数据,可以放宽执行时间、减少锁的持有时间。
2.分解关联查询*尽量拆分join关联查询:
减少锁竞争、高效可拓展、减少冗余尽量用innerjoin避免LEFTJOIN:
匹配查询和主表全查在使用Left(right)join的时候,一定要在先给出尽可能多的匹配满足条件,减少Where的执行:
on的执行优先级高于where尽量避免子查询,而用join:
select.where.(select.),查询执行的基础,1.mysql客户端/服务器通信协议半双工通信协议:
服务器和客户端发送数据的动作不能同时发生,客户端发送单独的请求数据包,查询语句大小受max_allowed_packet影响。
服务器获取响应数据缓存到内存中分多个数据包多次发送,所有数据发送结束释放查询所占资源。
当查询结果过大时可以采用不缓存数据直接进行处理以便尽早释放资源:
mysql_query(select*from.,$con);tomysql_unbuffered_query(select*from.,$con);,2.查询缓存缓存完整的select查询结果。
表更新缓存失效。
简单代价小。
需要配置。
解析查询语句之前,如果查询缓存是打开的,优先检查这个查询是否命中查询缓存中的数据。
通过哈希查找。
如果命中则检查用户权限,跳过解析查询步骤直接返回结果。
3.查询优化器Mysql查询优化器的工作是为查询语句选择合适的执行路径。
mysql优化器优化类型:
重新定义关联表的顺序将外连接转化为内链接使用等价交换规则优化count、min、max(无查询条件)、in(最慢的情况是where包含in的子查询)预估并转化为常数表达式覆盖索引扫描提前终止查询(limit)等值传播,4.优化器的局限性mysql搞不定的或者做的不好的。
1.关联子查询select*fromfilmwherefilm_idin(selectfilm_idfromfile_actorwhereactor_id=1)-innerjoin2.union的限制(select.)unionall(select.)limit.-(select.limit.)unionall(select.limit.)limit.3.并行执行.单核多线程。
4.哈希关联。
可以通过memory引擎的索引特性实现类哈希关联。
4.优化器的局限性(续)5.最大值最小值selectmin(actor_id)fromactorwherefirst_name=aa-selectmin(actor_id)fromactorwherefirst_name=aalimit16.同一表上的查询和更新updateaasbsetcnt=(selectcount(*)fromaascwherec.type=b.type)(error)-updateainnerjoin(selecttype,count(*)ascntfromtblgroupbytype)asdUSING(type)sett=t;,优化特定类型的查询,COUNT()查询优化myisam的count()函数非常快的前提是在没有where条件的情况下count(*)会忽略所有的列而直接统计所有的行数,在任何情况下都大于等于count(col_name)优化的几个例子:
selectcount(*)fromcitywherecity_id5-select(selectcount(*)fromcity)-count(*)fromcitywherecity_idselectcount(color=blueornull).,limit查询优化针对偏移量非常大的数据非常有效。
select*fromalimit100000,5;扫描10005条记录丢掉10000条。
-select*fromainnerjoin(selctfile_idfromalimit10000,5)asbusing(file_id)-select*fromawherepositionbetween10000and10004,用户自定义变量作为一些功能补充来完成特定的场景:
排行榜:
setmingci:
=0;selcetmingci:
=mingci+1asmingcifroma;避免重复查询:
updateasetaa=NOW()whereid=33andnow:
=NOW();selectnow;(据说这次连数据库都不需要访问了,网卡慎用不适用),ANDSOON.,排行榜加强版:
id(演员id),film(电影)setcur_cnt:
=0,pre_cnt:
=0,rank:
=0;/当前数量,前一个数量,排名selectid,cur_cnt:
=cntascnt,rank:
=if(pre_cnt$cur_cnt,rank+1,rank)asrank,pre_cnt:
=cur_cntasaafrom(selectid,count(*)ascntfromagroupbyidorderbyiddesclimit100)asd;,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql 查询 性能 优化