本文以具体案例分析了SQL查询优化的处理方法。
首先以具体案例进行了SQL语句问题的分析,然后给出了问题的解决办法,最后结合MySQL数据库在Nat的应用案例进行了方法分析。出现问题的SQL语句,如图:关联查询从上面简化的SQL语句,可以看出,首先进行的是关联查询。子查询其次,是嵌套的子查询。此子查询是为了找出多个用户共同拥有的组ID。所以语句中的“,,”是根据场景来定的,并且需要和后面“count(id)3”的个数对应。简单来说,就是找用户交集的组ID。
初步断定首先,对于只有一个用户ID时,我会把上面的语句简化成:所以,初步断定应该是嵌套的子查询部分占用了大部分的时间。
既然定位到了是嵌套的子查询语句的问题,那又要分为两块待排查的区域:是子查询本身耗时大,还是嵌套而导致慢查询?结果很容易发现,当我把子查询单独在DB中执行时,是非常快的。所以排除。剩下的不言而喻,20秒的慢查询是嵌套引起的。将子查询的ID单独执行,并把得到的结果序列手动拼成一段ID,如:1,2,3,4,...,;将上面得到的序列ID,手动替换到原来的SQL语句;执行,发现,很快!只用了约ms;
那么如何实现外网访问内网MySQL数据库呢。明确内网mysql数据库访问地址,并确保mysql数据库服务正常。在mysql数据库服务器局域网内安装nat客户端,并使用它。登陆。主面板/端口映射列表/添加映射。设置映射信息。选择全端口映射类型。填写内网mysql数据库服务器IP地址,和外网访问的域名。可以使用自己的域名,也可以使用二级域名。将鼠标放在输入框有向导提示。
添加映射后,可查看映射状态。将鼠标放在映射图标上有提示当着状态信息。新添加映射一般几分钟内生效。访问者打开mysql全端口映射后的域名和访问端口。如在添加访问地址时,同时勾选允许局域网访问,则在访问者局域网内都可以访问。在使用访问者本机,可以进行访问mysql数据库。访问地址是本地访问者打开的域名端口。