Limit参数的使用,分为两种情况:【limit n】和【limit m,n】
一、【Limit m,n】
Limit的下标默认从0开始,第一个参数是下标,查数据的话是从第一条开始查,第二参数就限定了查几条数据。
Select * from table limit 0,3; --检索记录为1-4行数据
Select * from table limit 5,-1; --检索记录为6-最后一行数据
其实去扫描m+n条数据,然后过滤掉前面的m条数据,当m越大,那么需要扫描的数据也就越多,性能也会越来越慢。
EXPLAIN SELECT * FROM product_new LIMIT 300000,10 -- 很慢很慢
EXPLAIN SELECT * FROM product_new ORDER BY id LIMIT 300000,10 -- 需要添加排序条件 就能走到id的索引
针对这种情况,有以下几种方案可以进行一定的优化。
1.如果id是趋势递增的,那么每次查询都可以返回这次查询最大的ID,然后下次查询,加上大于上次最大id的条件,这样会通过主键索引去扫描,并 且扫描数量会少很多很多。因为只需要扫描where条件的数据
SELECT * FROM product_new WHERE id>300396 ORDER BY id LIMIT 10 -- 根据id查询,并且使用where过滤
2.先limit出来主键ID,然后用主表跟