欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-04-17
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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。