zoukankan      html  css  js  c++  java
  • Sql语句优化

    我所在的公司数据库是mysql, 表多数据多,经常mysql占用内存高出100%,开始使用了,show null processlist 来查找运行慢的sql,但是有时候好像没有发现非常慢和耗资源的sql,

    然后我们通过设置 mysql的慢查询的日志文件。找到了几条sql.并找到了原因和优化:

    EXPLAIN
    select
                    ( SELECT GROUP_CONCAT(productsearchid, '##') FROM vtiger_servicecontracts WHERE sc_related_to = related_to LIMIT 2 ORDER BY servicecontractid DESC ) AS 'productlist',
                    vtiger_servicecomments.assigntype,
                    IFNULL((select vtiger_modcomments.addtime from vtiger_modcomments
                                where vtiger_modcomments.modulename='Accounts'
                                and vtiger_modcomments.moduleid=vtiger_servicecomments.related_to
                                and vtiger_modcomments.creatorid=vtiger_servicecomments.serviceid
                                ORDER BY vtiger_modcomments.addtime desc LIMIT 1),vtiger_servicecomments.addtime) as lastfollowtime,
                    vtiger_servicecomments.allocatetime,
                    vtiger_servicecomments.servicecommentsid,
                    vtiger_servicecomments.salesorderproductsrelid,
                    vtiger_servicecomments.related_to as accountid,
                    (vtiger_account.accountname) as related_to,
                    vtiger_servicecomments.addtime,
                    (select leadsource from vtiger_account where vtiger_account.accountid=vtiger_servicecomments.related_to ) as leadsource,
                    '--' as productid,
                    vtiger_servicecomments.starttime,
                    vtiger_servicecomments.endtime,
                    '--' as serviceamount,
                    IFNULL((select CONCAT(last_name,'[',IFNULL((select departmentname from vtiger_departments where departmentid = (select departmentid FROM vtiger_user2department where userid=vtiger_users.id LIMIT 1)),''),']',(if(`status`='Active','','[离职]'))) as last_name from vtiger_users where id=vtiger_servicecomments.serviceid),'--') as serviceid,
    
                    (select last_name from vtiger_users where id=vtiger_servicecomments.assignerid) as assignerid,
                    (select accountrank from vtiger_account where vtiger_account.accountid=vtiger_servicecomments.related_to) as accountrank,
                    (select IFNULL((select CONCAT(last_name,'[',IFNULL((select departmentname from vtiger_departments where departmentid = (select departmentid FROM vtiger_user2department where userid=vtiger_users.id LIMIT 1)),''),']',(if(`status`='Active','','[离职]'))) as last_name from vtiger_users where vtiger_crmentity.smownerid=vtiger_users.id),'--') as smownerid from vtiger_crmentity where vtiger_crmentity.crmid=vtiger_servicecomments.related_to and vtiger_crmentity.deleted=0) as ownerid,
                    (select departmentname from vtiger_departments where vtiger_departments.departmentid=(select departmentid from vtiger_user2department where vtiger_user2department.userid=(select vtiger_crmentity.smownerid from vtiger_crmentity where vtiger_crmentity.crmid=vtiger_servicecomments.related_to and vtiger_crmentity.deleted=0))) as departmentid,
                    '--' as schedule,
                    vtiger_servicecomments.nofollowday,
                    vtiger_servicecomments.remark
                    from  vtiger_servicecomments
                        LEFT  join vtiger_account ON vtiger_account.accountid = vtiger_servicecomments.related_to
                        LEFT JOIN  vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_servicecomments.related_to
                        LEFT JOIN vtiger_servicecomments_returnplan ON vtiger_servicecomments_returnplan.commentsid = vtiger_servicecomments.servicecommentsid
                        where 1=1   and vtiger_servicecomments.assigntype='accountby' GROUP BY vtiger_servicecomments.servicecommentsid
     order by  vtiger_servicecomments.nofollowday 
    LIMIT 0,20;

    红色的部分:表示在关联查询时,mysql的进行了文件排序。并且取出的字段不全是第一个表的字段。这种排序是由于数量比较多mysql需要使用到磁盘排序,所以叫做文件排序。如果出现这样的标示,可以去掉排序看看sql是否快了很多。

  • 相关阅读:
    Xshell连接virtualbox下的fedora虚拟机
    异常:java.sql.SQLIntegrityConstraintViolationException: Column 'category' cannot be null
    JQuery中获取表中的数据
    关于springboot报错:新建springboot项目报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    IDEA设置
    java基础总结
    JavaWeb----Servler
    IDEA2020版使用
    Java面向对象
    【CMU 6.824】 RPC & Threads
  • 原文地址:https://www.cnblogs.com/shaoshao/p/6530402.html
Copyright © 2011-2022 走看看