百万级别的分页
方式一
直接select * from limit M,N
适用数据量小的场景。
缺点:全表扫描,速度很慢,从M的地方取出N条,其余抛弃。
方式二
使用主键索引或者唯一索引,使用limit的方式 SELECT * FROM 表名称 WHERE id_pk > (pageNum10) LIMIT M 会漏掉数据 SELECT * FROM 表名称 WHERE id_pk > (pageNum10) ORDER BY id_pk ASC LIMIT M
如何处理大量的in操作
首先区别in和exists的区别。
如果实在很多,那么对查询的数据做一个临时表,筛选字段作为主键id。然后使用left join的方式去处理。
select *from 临时表 t1 left join 原来的表t2 where t1.id = t2.id。