zoukankan      html  css  js  c++  java
  • mysql实战优化之二:limit优化(大表翻页查询时) sql优化

    mysql的表test中有20105119行数据。
    建立索引:data_status,place_cargo_status

    场景1:

    SELECT
    id,
    resource_id,
    resource_type,
    ...
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',arrive_work_day,send_work_day,1,cargo_arrive_time),
    load_zone_code,
    cargo_send_batch,
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',send_work_day,send_work_day,2,cargo_arrive_time),
    cargo_arrive_next_batch,
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',send_work_day,arrive_next_work_day,3,cargo_arrive_time),
    next_zone_code,
    ...
    FROM
    test
    WHERE
    data_status=1 and place_cargo_status=1
    LIMIT 0,10000

    结果:查询时间为:7.360s

    场景1:

    SELECT
    id,
    resource_id,
    ...
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',arrive_work_day,send_work_day,1,cargo_arrive_time),
    load_zone_code,
    cargo_send_batch,
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',send_work_day,send_work_day,2,cargo_arrive_time),
    cargo_arrive_next_batch,
    F_OMCS_LINK_GET_DAY_BY_WORKDAY('2017-03-13',send_work_day,arrive_next_work_day,3,cargo_arrive_time),
    ...
    FROM
    test
    WHERE
    data_status=1
    LIMIT 0,10000

    结果:查询时间为:7.111s

    场景三:

    select * from test
    WHERE
    data_status=1 and place_cargo_status=1
    LIMIT 0,10000

    结果:查询时间为0.141s
    场景四:

    select * from test
    WHERE
    data_status=1
    LIMIT 0,10000

    查询时间为0.140s

    查看执行计划:

    场景四的执行计划:

    优化一:

    如上type=all,是因为data_status是varchar型的,为其加单引号后,如下:

    优化二:使用主键翻页,

     测试结果如下:

    select * from tt_lk_place_cargo where data_status='1' and id between  20000000 and 20030000;

    结果:使用时间0.381s

     

  • 相关阅读:
    Mycat适合场景及不适合场景
    solr与Elasticsearch对比
    分布式搜索之搭建Solrcloud(Solr集群)
    Mysql索引最左匹配原则
    CAS实现单点登录SSO执行原理及部署
    Spring Cloud,Dubbo及HSF对比
    Dubbo支持的协议的详解
    Dubbo架构设计详解
    几种分布式锁的实现方式
    深入分析volatile的实现原理
  • 原文地址:https://www.cnblogs.com/duanxz/p/3886944.html
Copyright © 2011-2022 走看看