使用id子查询的limit语句真的能提高执行效率吗
  xaeiTka4h8LY 19天前 25 0

近日解决一线上查询性能问题,发现使用了基于id子查询的limit语句。如下:

SQL1: 基于id子查询、两个索引条件的limit语句

SELECT *
FROM   order_status
WHERE  vendor_code IN ( 'bk0857', 'bk0001' )
   AND createtime >= '2022-03-17 00:00:00'
   AND createtime <= '2022-03-17 18:00:00'
   AND id <= (SELECT id
              FROM   order_status
              WHERE  vendor_code IN ( 'bk0857', 'bk0001' )
                 AND createtime >= '2022-03-17 00:00:00'
                 AND createtime <= '2022-03-17 18:00:00'
              ORDER  BY id DESC
              LIMIT  10, 1)
ORDER  BY id DESC
LIMIT  10;

该语句执行120s+未返回, 将子查询直接替换成id具体值,查询性能依然没有改观(由此推断不是子查询性能问题)。查看其explain结果如下:
使用id子查询的limit语句真的能提高执行效率吗
SQL2: 不带id的子查询、两个索引条件的limit语句:

SELECT *
FROM   order_status
WHERE  vendor_code IN ( 'bk0857', 'bk0001' )
   AND createtime >= '2022-03-17 00:00:00'
   AND createtime <= '2022-03-17 23:59:59'
ORDER  BY createtime DESC
LIMIT  10, 10;

该语句1s左右即可返回。其explain结果如下:
使用id子查询的limit语句真的能提高执行效率吗
减少vendor_code查询条件后测试结果。
SQL3: 基于id子查询、一个索引条件的limit语句:

SELECT *
FROM   order_status
WHERE  createtime >= '2022-03-17 00:00:00'
   AND createtime <= '2022-03-17 18:00:00'
   AND id <= (SELECT id
              FROM   order_status
              WHERE  createtime >= '2022-03-17 00:00:00'
                 AND createtime <= '2022-03-17 18:00:00'
              ORDER  BY id DESC
              LIMIT  10, 1)
ORDER  BY id DESC
LIMIT  10;

50+ms内查询出结果,explain结果:
使用id子查询的limit语句真的能提高执行效率吗
SQL4: 不带id子查询、一个索引条件的limit语句:

SELECT *
FROM   order_status
WHERE  createtime >= '2022-03-17 00:00:00'
   AND createtime <= '2022-03-17 23:59:59'
ORDER  BY createtime DESC
LIMIT  10, 10;

40-ms内查询出结果,explain结果:
使用id子查询的limit语句真的能提高执行效率吗
根据以上SQL执行结果分析:

  • 在未使用子查询的情形下,都使用了idx_createtime索引,所以查询性能较快。
  • 在使用子查询的情形下,主查询如果只有一个索引条件,查询性能依旧很快(估计索引依旧起作用)。
  • 在使用子查询的情形下,主查询如果使用了两个以上的索引条件,则只有一个索引生效,其他索引作为条件进行过滤,因此影响了效率。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 19天前 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年05月17日   32   0   0 MySQLgithub
  xaeiTka4h8LY   2024年05月17日   30   0   0 MySQL数据库
xaeiTka4h8LY