本文持续更新
1、大表分页查询优化
MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回N行,那当offset特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。
表 pub_tstockinfo数据量10万,获取50000条记录后的100条记录,一般写法如下(耗时0.3秒左右)
select * from pub_tstockinfo LIMIT 50000,20;
优化后如下(耗时0.03秒左右)
SELECT *
FROM pub_tstockinfo a
INNER JOIN (SELECT inter_code
FROM pub_tstockinfo
LIMIT 50000, 20) b
ON a.inter_code = b.inter_code
当然,工作中大表查询业务逻辑要复杂太多,不过大表一定要有一个主键索引(数值型),而且where和order by时,尽量要走主键索引。
2、建表时,每个字段都必须有默认值,添加非空校验,不允许null值为默认值,null值判断往往不会走索引,坑比较多,好的规范往往是高效代码的保证。