栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

MySql 大数据查询优化方案

    优化shema、sql语句+索引

    第二加缓存、memcached、Redis

    主从读复制、读写分离

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

    水平切分,针对数据量大的表,这一步是最麻烦的,最能考验技术水平要选择一个合理的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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号