提升SQL语句性能的方法百家号百度经

北京中科忽悠 http://www.yuzhouz.com/bdfzx/

用具体案例进行SQL语句性能提升的方法。

先用实际案例分析了优化SQL语句的方法,然后再结合nat这个实际案例分析了如何实现外网访问内网Mysql数据库的方法。线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到%,执行时间长达7s左右。

优化方法:优化的总体思路是拆分sql,将排序操作和查询所有信息的操作分开。第一条语句:查询符合条件的数据,只需要查询g.id即可SELECTDISTINCTg.idFROMgm_gamegLEFTJOINgm_cpcpONcp.id=g.cp_idANDcp.deleted=0LEFTJOINgm_categorycONc.id=g.category_idANDc.deleted=0LEFTJOINgm_typetONt.id=g.type_idANDt.deleted=0WHEREg.deleted=0ORDERBYg.modify_timeDESCLIMIT20;

第二条语句:查询符合条件的详细数据,将第一条sql的结果使用in操作拼接到第二条的sqlSELECTDISTINCTg.*,cp.nameAScp_name,c.nameAScategory_name,t.nameAStype_nameFROMgm_gamegLEFTJOINgm_cpcpONcp.id=g.cp_idANDcp.deleted=0LEFTJOINgm_categorycONc.id=g.category_idANDc.deleted=0LEFTJOINgm_typetONt.id=g.type_idANDt.deleted=0WHEREg.deleted=0andg.idin(…………………)ORDERBYg.modify_timeDESC;

常见的优化SQL语句方法如下:1)拆分SQL语句临时表主要是用于排序和分组,很多业务都是要求排序后再取出详细的分页数据,这种情况下可以将排序和取出详细数据拆分成不同的SQL,以降低排序或分组时临时表的大小,提升排序和分组的效率,我们的案例就是采用这种方法。2)优化业务,去掉排序分组等操作有时候业务其实并不需要排序或分组,仅仅是为了好看或者阅读方便而进行了排序,例如数据导出、数据查询等操作,这种情况下去掉排序和分组对业务也没有多大影响。

接下来用具体案例分析在没有公网IP的情况下外网访问内网数据库方法:确保内网应用正常。nat端口映射之全端口映射。在mysql数据库服务器局域网内安装nat客户端,并使用它。登陆。主面板/端口映射列表/添加映射。设置映射信息。选择全端口映射类型。填写内网mysql数据库服务器IP地址,和外网访问的域名。可以使用自己的域名,也可以使用二级域名。将鼠标放在输入框有向导提示。

外网访问端安装nat客户端并使用访问者。访问者打开mysql全端口映射后的域名和访问端口。如在添加访问地址时,同时勾选允许局域网访问,则在访问者局域网内都可以访问。在使用访问者本机,可以进行访问mysql数据库。访问地址是本地访问者打开的域名端口。




转载请注明:http://www.aierlanlan.com/cyrz/5007.html