MySql 大数据查询优化方案和超大分页的处理方法

MySql 大数据查询优化方案

  1. 优化shema、sql语句+索引

  2. 第二加缓存、memcached、Redis

  3. 主从读复制、读写分离

  4. 垂直拆分,根据模块耦合度,将一个大的系统分为多个小系统,也就是分布式系统

  5. 水平切分,针对数据量大的表,这一步是最麻烦的,最能考验技术水平要选择一个合理的shardingkey 为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改动。sql 中尽量带shardingkey,将数据定位到限定的表上去查,而不是扫描全部的表;

MySql 超大分页的处理方法


超大的分页一般从两个方向上解决 :

  • 数据库层面,这也是我们主要集中关注的,类似于 select * from table where age > 20 limit 100000,10 这种查询其实也是有可以优化的余地。 这句需要 load 100000 数据 然后基本上全部丢弃,支取10条数据当然比较慢。当时我们可以修改为 select * from table where id iin (slleect id from table where age >20 limit 100000,10)
    这样也load 100000 的数据,但是由于索引覆盖,要查询的所有字段都在索引中,所以速度很快。同时ID 是连续的,我们还可以 select * from table where id > 100000 limit 10,效率也是不错的。优化的可能性有很多种,但是核心思想都是一样的,就是减少load的数据
    -从需求的角度减少这种请求,,,主要是不做类似的需求(直接跳转到及办完页之后的具体一页,只允许逐页5查看或者按照给定的路线走,这样是可预测的,可缓存)以及防止id泄露且林旭被人恶意攻击

解决超大的分页,其实主要是靠缓存,可预测性的提前查到的内容,缓存到Redis 等 K-V数据库中,直接返回即可。

【推荐】利用延迟关联或者子查询优化超多页场景
说明: Mysql并不是跳过 offset 行,而是取offset + N 行,然后返回放弃前 offset 行,返回N行,那的那个offset 特别大的时候,效率分厂的地下,妖魔控制返回的总页数,要么对超过特定阈值的页数进行sql改写

例子:先快速定位需要获取的ID段,然后再关联
select a.* from table a , (select id from table where条件 lmit 10000,10) b where a.id = b.id

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值