多张表联合查询,分页时,查询慢解决方案
两张表联合查询,表1数据量7.5万,表2数据量400,联合查询时,当查询尾页的时候,查询时间是第一页的千倍
注意:本方案不考虑排序问题,同时code必须为从0开始的自增值
-
最初的做法
select * from goods as g left join goods_class as c on c.class_code = g.class_code limit 0, 10
-
调整后的方案
select * from goods as g left join goods_class as c on c.class_code = g.class_code -- 这里的0等同于limit额第一个参数 where g.code >= 0 limit 10
-
知识点分析
mysql官方文档:[LIMIT {[offset,] row_count | row_count OFFSET offset}]
官方解释:LIMIT取一个或两个数字自变量,自变量必须是非负的整数常数(当使用已预备的语句时除外)–>这里的与预备语句是我们在项目中自定义的属性字段
使用两个自变量时,第一个自变量指定返回的第一行的偏移量,第二个自变量指定返回的行数的最大值。初始行的偏移量为0(不是1)。
从官方的解释来看:当第一个省略或者值较小时,找到就返回第二参数的数据量,且不读取后续的数据,如果第一个参数值很大,那么会知道定位到偏移量的位置,才取数据,这样就类似于全表扫描,最终导致数据查询慢。
以上是博主个人理解,仅作参考。