分布式任务调度内的 MySQL 分页查询优化

作者:vivo 互联网数据库团队- Qiu Xinbo


本文主要通过图示介绍了用主键进行分片查询的过程,介绍了主键分页查询存在SQL性能问题,如何去创建高效的索引去优化主键分页查询的SQL性能问题

对于数据分布不均如何发现,提供了一些SQL查询案例来进行参考,对MySQL Index Condition Pushdown优化算法做了一些简单介绍。


一、背景介绍


最近在线上环境发现了一条执行较慢的分页查询,高并发执行,产生了大量的慢查询日志,CPU使用率逐步升高。


通过观察它的执行时间,发现该SQL查询时快时慢,执行时间并不稳定,以至于在高并发执行场景时,数据库来不及响应,数据库服务变慢。


分布式任务调度内的 MySQL 分页查询优化-1

分布式任务调度内的 MySQL 分页查询优化-2


二、分析定位


2.1 定位 SQL 执行变慢的原因


通过数据库管理平台查看SQL执行信息发现,SQL解析行数(扫描行数)和SQL执行时间都很不稳定,执行时长和解析行数(扫描行数)是成正比的。


这个也能解释的通为什么SQL执行时长变了,因为扫描行数变多了,SQL执行时间成比例增长。

    -- SQL全文
    select
    id,
    uuid,
    name,
    user_type,
    is_deleted,
    modify_date
    from
    test_user
    where
    is_deleted=0
    and user_type=0
    and id > 10000
    and id % 10 = 9
    order by
    id limit 500;