• sql优化


     一次侧 d_firstminutehandledata 

    SELECT
        count(1)
    FROM
        d_firstminutehandledata
    WHERE
        stationBranchId = 532
    AND collectionTime BETWEEN '2022-01-13'
    AND '2023-03-01'

     九万多条数据 

    SELECT
        collectionTime,
        stationBranchId,
        accHeat,
        accFlow,
        waterMeterAccFlow,
        Data_FMeterSFlow_A,
        totalElectricMeterElectricity
    FROM
        d_firstminutehandledata
    WHERE
        stationBranchId = 532
    AND collectionTime BETWEEN '2022-01-13'
    AND '2023-03-01'
    LIMIT 10000

     

     查询一万条数据21秒

    SELECT
        collectionTime,
        stationBranchId,
        accHeat,
        accFlow,
        waterMeterAccFlow,
        Data_FMeterSFlow_A,
        totalElectricMeterElectricity
    FROM
        d_firstminutehandledata
    WHERE
        stationBranchId = 532
    AND collectionTime BETWEEN '2022-01-13'
    AND '2023-03-01'
    ORDER BY
        collectionTime DESC
    LIMIT 10000

     

    加上排序,同样是查询一万条数据,但是查询时间却变成了285秒

    SELECT
        collectionTime,
        stationBranchId
    FROM
        d_firstminutehandledata
    WHERE
        stationBranchId = 532
    AND collectionTime BETWEEN '2022-01-13'
    AND '2023-03-01'
    ORDER BY
        collectionTime DESC
    LIMIT 10000

    仅仅只查询联合主键(联合主键会创建索引),查询条件是索引字段,查询字段也是索引字段是非常快的 ,即使加了排序也是非常快,不到1秒

    那么我想到可以利用这个非常快的查询,来查询其他需要的字段

    SELECT
        b.*, a.accHeat,
        a.accFlow,
        a.waterMeterAccFlow,
        a.Data_FMeterSFlow_A,
        a.totalElectricMeterElectricity
    FROM
        d_firstminutehandledata a
    RIGHT JOIN (
        SELECT
            collectionTime,
            stationBranchId
        FROM
            d_firstminutehandledata
        WHERE
            stationBranchId = 532
        AND collectionTime BETWEEN '2022-01-13'
        AND '2023-03-01'
        ORDER BY
            collectionTime DESC
        LIMIT 10000
    ) b ON a.stationBranchId = b.stationBranchId
    AND a.collectionTime = b.collectionTime

     用子查询,然后right join,这样主查询中就不需要排序什么的操作,仅仅是索引 in 子查询,而子查询又非常快,结果是32秒,跟第一个无排序使用了21秒的查询相比虽然慢了10秒,但是 和 第二个加了排序的查询 285秒相比 效率却是大大提高了,可以说是质的飞越,这样既可以满足带排序的查询,又可以满足时间上的快速,完美!

  • 相关阅读:
    短视频不为人知的素材来源 以及平台推荐的黑盒机制
    说什么月入几万 我是不是应该一头撞死?
    Python 3 进阶 —— 使用 PyMySQL 操作 MySQL
    CentOS安装Subversion 1.9.*版本客户端
    [算法]PHP随机合并数组并保持原排序
    CentOS安装Memcached
    Git Windows客户端保存用户名和密码
    ApiGen 4.0配置项
    ApiGen安装
    SQL服务器模式
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/16140702.html
Copyright © 2020-2023  润新知