关于分页查询优化的问题
来源:5-6 高并发引起的重复写入
小小同学William
2018-12-18
关于分页有两个疑问:
-
select * from bigdata where id > 5000000 and id <= 5000000+10; 此种方案适合主键连续,因此表的设计采用逻辑删除。
疑问:例如 5000003、5000004 被标识成逻辑删除,如果在用上面的语句查询,那查出来的数据里就会包含 “已删除” 的数据了。可是如果在 where 条件里过滤掉逻辑删除的标识,查询出来的数据又不满足 10 条分页要求(其中有两条已经过滤掉了,设计查出来的只是8条而已)。这钟情况该怎么办呢 ? -
如果我的主键id 设计的并不是有序的 int 类型,而是 uuid 呢 ?上面那种方法肯定就不行了吧,而在继续沿用 LIMIT 关键字,那性能问题还是无法解决。
写回答
1回答
-
神思者
2018-12-18
第一种情况,我在视频里讲过,还有一种折中方案,先查询只有主键的分页记录,然后再做表连接根据主键抓取完整的记录。第二种情况,用uuid做主键是因为在分布式环境下吧。uuid做主键在Oracle上没什么性能的损失,但是用在MySQL上性能损失很大,所以不是极特殊的情况,一般都不会用uuid做mysql主键。第二种分页也可以采用第一种的方式用表连接来做加速
012018-12-18
相似问题