• mysql数据库sql语句优化


    昨天帮同事优化了一个sql语句发出来共勉下:

    SELECT
    T.*,
    (
    SELECT
    S.codeName
    FROM
    sys_codelist S
    WHERE
    S.codeValue = T.packagingtype
    AND S.kindCode = 'PACKAGING'
    ) AS packagingtypeName,
    S.codeName AS codename,
    (
    SELECT
    picpath
    FROM
    zl_b_gd_pic
    WHERE
    1 = 1
    AND gdid = T.gdid
    LIMIT 0,
    1
    ) AS gdmainimagepath
    FROM
    zl_b_gd T
    LEFT JOIN sys_codelist S ON S.codeValue = T.levelcode
    WHERE
    1 = 1
    AND T.gdmode <> '3'
    AND TO_DAYS(T.invaliddate) > TO_DAYS(NOW())
    AND T.gdstatus = '2'
    AND gdtype = '2'
    ORDER BY
    STR_TO_DATE(
    gdpublishdate,
    '%Y-%m-%d %H:%i:%s'
    ) DESC

    主表1600条数据,codelist表4000+数据,当前查询时间为2.33s.

    SELECT
    T.*,
    PG.CODENAME AS packagingtypeName,
    S.codeName AS codename,
    (
    SELECT
    picpath
    FROM
    zl_b_gd_pic
    WHERE
    1 = 1
    AND gdid = T.gdid
    LIMIT 0,
    1
    ) AS gdmainimagepath
    FROM
    zl_b_gd T
    LEFT JOIN (SELECT * FROM sys_codelist WHERE KINDCODE='CORN_LEVEL') S ON T.levelcode = S.codeValue
    LEFT JOIN (SELECT * FROM sys_codelist WHERE kindCode = 'PACKAGING') PG ON T.packagingtype = PG.codeValue
    WHERE
    1 = 1
    AND T.gdmode <> '3'
    AND TO_DAYS(T.invaliddate) > TO_DAYS(NOW())
    AND T.gdstatus = '2'
    AND gdtype = '2'
    ORDER BY
    STR_TO_DATE(
    gdpublishdate,
    '%Y-%m-%d %H:%i:%s'
    ) DESC

    子查询换成了关联查询,查询时间为0.54s.

    执行计划如下:

    执行计划部分我说的不是很清晰,有可以描述清晰朋友可以帮忙解释下.

  • 相关阅读:
    ubuntu下ssh服务相关操作
    搜索引擎的基础-倒排索引
    mysql重置密码
    mysql 服务器配置
    Activiti如何替换已部署流程图
    循环select查询结果集
    存储过程范例,有输入输出参数,带回滚
    sql server中字符串无法替换空格的问题
    Myeclipse实用快捷键总结
    Linux中添加用户与删除用户
  • 原文地址:https://www.cnblogs.com/zhouy-77253569/p/9566648.html
Copyright © 2020-2023  润新知