Mysql面试题三

解决mysql的超大分页

  1. 减少load的数据,或者加快load数据的速度。使用子查询、索引覆盖减少加载的数据量。

    select * from table where age > 20 limit 1000000,10
    -- 加载1000000条数据只取10条,速度很慢
    select * from table where id in (select id from table where age > 20 limit 1000000,10)
    -- 虽然load了一百万条数据但使用了索引覆盖,要查询的所有字段都在索引中,速度快。
    
    
    -- 假如是无条件并且id是连续的可以采用如下方法
    select * from table where id >1000000 limit 10
    
  2. 从需求的角度减少这种请求。

  3. 使用内连接进行延迟关联

    select a.* from t5 a inner join (select id from t5 order by text limit 1000000, 10) b on a.id=b.id;
    -- 先在索引列上完成分页操作,在获取需要的列。
    
  4. 记录上次查询结束的位置(避免从头查,抛弃大量的数据)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值