Mysql limit 性能分析

1、mysql 中 limit 的使用:

       使用说明: limit 支持两个参数,offset 和 limit。offset 表示偏移量,limit 表示要取的数量。

        示例:返回第11-15条数据。

SELECT * FROM t_user WHERE LIMIT 10, 5;

2、性能分析:

        当 offset 较小是,查询很快,查询速率基本不受 offset 影响,但是当 offset 很大,一般offset 达到几百万或者几千万,查询性能明细降低。

        2、1 创建测试数据表,填入5000000条测试数据

                快速插入大量数据参考:https://www.jb51.net/article/161712.htm

        2、2 执行sql:

SELECT * FROM t_user WHERE `c_user_id` != '' LIMIT 3000000, 5;

          2、3 原因分析:我们发现,此时执行时间22.28秒,我们可以查看一下此时的 buffer pool

select index_name,count(*) from information_schema.INNODB_BUFFER_PAGE where INDEX_NAME in('idx_user_id','primary') and TABLE_NAME like '%t_user%' group by index_name;

可以看到 buffer pool 关于user表有3955个数据页,2171个索引页,加载太多的数据页导致sql变得很慢。

        2、4 优化:

                2、4、1 使用id优化,我们可以记录上次查询的最后一个id,通过添加id的判断条件来优化查询。

SELECT * FROM t_user WHERE id > 3000000 AND `c_user_id` != '' LIMIT 5;

                

                 2、4、2  子查询方式优化

SELECT * FROM (SELECT id FROM t_user limit 3000000,5) a LEFT JOIN t_user b on a.id = b.id;

                 我们可以看到此时性能都有较大提升,此时再次分析buffer pool,就能看到加载的数据页较之前减少了很多。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值