① Select * from table
LIMIT m; # 从0开始,m条记录
② Select * from table
LIMIT m,n; # 从m+1条记录开始,n条记录【
查询语句偏移量offset很大的时候,效率较低】
③ Select * from table
LIMIT rows OFFECT offset;
第一个自变量指定:返回的第一行的偏移量offset,第二个自变量指定:返回的行数的最大值。初始行的偏移量为0(不是1)。
Select*from sakila.rental LIMIT 14036,10;#① 6ms
Select*from sakila.rental LIMIT 10 OFFSET 14036;#② 6ms ,兼容PostgreSQL ,【结果与 ① 等价】
Select*from sakila.rental WHERE rental_id>=14036 LIMIT 10; #③ 1ms
Select*from sakila.rental WHERE rental_id>=(SELECT rental_id from sakila.rental limit 14306,1) LIMIT 10; #④ 3ms
offset偏移量较大时,可先获取到offset的id后,再直接使用limit size来获取数据。(实际SQL中偏移量对应字段应该where字段不一致才有效果,和SQL①对比)
Select*from sakila.rental LIMIT 0; #⑤ 迅速返回一个空集。这可以用于检查一个查询的有效性
SELECT*FROM rental WHERE rental_date ='2005-08-01 09:45:58'LIMIT 1; #⑥ 无limit耗时0.018s,# 有limit耗时0.002s
Select*from sakila.rental INNER JOIN(SELECT rental_id from sakila.rental limit14306,10) aa USING(rental_id); # 3ms,必须给子查询的表加一个别名aa;效果和④等价
Note:
- where...limit....性能基本稳定,受偏移量offset和行数rows的影响不大;
- 而单纯采用limit的话,受偏移量的影响很大,当偏移量大到一定后性能开始大幅下降。