• MySQL自增主键排序问题


    今天遇到一个问题,mysql数据库,在有些场景下,使用自增主键id排序+limit查询时,会很慢。

    场景1:表数据50W+,id倒序/升序,limit分页,结果集<=10,耗时 0.9~1.4秒,不分页耗时100~180毫秒.

    备注:结果集数量越小,查询速度越慢。

    如下SQL

    SELECT
        id,
        corp_id,
        org_id,
        bill_code,
        bill_maker,
        product_key_id,
        latest,
        reject_and_submit_status,
        audit_status,
        sku_id,
        enable_flag,
        special_num,
        special_period,
        special_flag,
        batchno_flag,
        medicine_flag,
        erp_product_type,
        zdyh_flag,
        creator,
        ts,
        modify_date,
        modifier,
        yn,
        common_name,
        product_zjm,
        product_name,
        medicine_type,
        product_type,
        dosage_form,
        dosageform_str,
        specification,
        unit,
        unit_str,
        storage_condition,
        bar_code,
        pzwh,
        pzwhqx,
        producer,
        production_place,
        expire_date,
        bzcpsms,
        zlzxbz,
        mah,
        yfyl,
        syz,
        buyer,
        sn_flag,
        sfylqx,
        input_vat,
        output_vat,
        vc_medicine_flag,
        new_specific_flag,
        cold_chain_flag,
        storage_mode,
        min_temperature,
        max_temperature,
        submit_date,
        storage_location_code,
        storage_location_name,
        proof_code,
        elqxzjyfl,
        drug_safety_product_id,
        drug_safety_standard_code,
        prescription_flag,
        store_property
    FROM
        my_table
    WHERE
        org_id=180
    AND audit_status IN (3,-2)
    AND yn = 1
    AND (
            sku_id LIKE CONCAT("%",'100001727506',"%")
        OR  common_name LIKE CONCAT("%",'100001727506',"%")
        OR  product_zjm LIKE CONCAT("%",'100001727506',"%"))
    ORDER BY id DESC 

    场景2:表数据50W+,id倒序,limit分页,结果集>=10000,耗时 30~50毫秒,不分页耗时500~600毫秒.

    场景2:表数据50W+,id升序,limit分页,结果集>=10000,耗时 200~300毫秒,不分页耗时500~600毫秒.

    备注:结果集数量越大,查询速度越快

    SELECT
        id,
        corp_id,
        org_id,
        bill_code,
        bill_maker,
        product_key_id,
        latest,
        reject_and_submit_status,
        audit_status,
        sku_id,
        enable_flag,
        special_num,
        special_period,
        special_flag,
        batchno_flag,
        medicine_flag,
        erp_product_type,
        zdyh_flag,
        creator,
        ts,
        modify_date,
        modifier,
        yn,
        common_name,
        product_zjm,
        product_name,
        medicine_type,
        product_type,
        dosage_form,
        dosageform_str,
        specification,
        unit,
        unit_str,
        storage_condition,
        bar_code,
        pzwh,
        pzwhqx,
        producer,
        production_place,
        expire_date,
        bzcpsms,
        zlzxbz,
        mah,
        yfyl,
        syz,
        buyer,
        sn_flag,
        sfylqx,
        input_vat,
        output_vat,
        vc_medicine_flag,
        new_specific_flag,
        cold_chain_flag,
        storage_mode,
        min_temperature,
        max_temperature,
        submit_date,
        storage_location_code,
        storage_location_name,
        proof_code,
        elqxzjyfl,
        drug_safety_product_id,
        drug_safety_standard_code,
        prescription_flag,
        store_property
    FROM
        my_table
    WHERE
        org_id=180
    AND audit_status IN (3,-2)
    AND yn = 1
    AND (
            sku_id LIKE CONCAT("%",'1',"%")
        OR  common_name LIKE CONCAT("%",'1',"%")
        OR  product_zjm LIKE CONCAT("%",'1',"%"))
    ORDER BY id desc
    limit 20

    具体原因:未查明....

    结论:不要使用id排序与limit一起使用,如果需要,请做足场景测试,有效利用,避免出现慢SQL

  • 相关阅读:
    iis添加证书
    重谈主键和索引
    关于心跳包的方案探究
    flutter android keystore
    flutter photo_view的改造
    dart 命名规范
    dart 公共变量
    flutter 交互提示方式
    flutter container image FittedBox AspectRatio
    聊聊flutter的UI布局
  • 原文地址:https://www.cnblogs.com/zwcry/p/14755612.html
Copyright © 2020-2023  润新知