赞
踩
Mysql中limit的用法:在我们使用查询语句的时分,经常要返回前几条或者中间某几行数据,这个时分如何办呢?没有效担心,mysql已为我们供给了如许一个功能。
SELECT * FROM
table LIMIT
[offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强逼 SELECT 语句返回指定的记录数。LIMIT
接收一个或两个数字参数。参数必须是一个整数常量。假如给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初
始记录行的偏移量是 0(而没有是 1): 为了与 PostgreSQL 兼容,MySQL 也撑持句法: LIMIT # OFFSET
#。
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的完毕十足的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//假如只给定一个参数,它阐扬分解返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT
5; //检索前 5 个记录行
//换句话道,LIMIT n 等价于 LIMIT 0,n。
寄望limit 10和limit 9,1的没有同:
譬喻:
1.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90001
) As tmp
) limit 100;
2.
Select * From cyclopedia Where ID>=(
Select Max(ID) From (
Select ID From cyclopedia Order By ID limit 90000,1
) As tmp
) limit 100;
一样是取90000条后100笔记录,第1句快借是第2句快?
第1句是先取了前90001笔记录,取个中最大一个ID值作为起始标识,然后哄骗它可以快速定位下100笔记录
第2句择是仅仅取90000笔记录后1条,然后取ID值作起始标识定位下100笔记录
第1句实施成果.100 rows in set (0.23) sec
第2句实施成果.100 rows in set (0.19) sec
其真第2句完全可以简化成:
Select * From cyclopedia Where
ID>=(
Select ID From cyclopedia limit 90000,1
)limit 100;
直接哄骗第90000笔记录的ID,没有效颠末Max运算,如许做现实上功用果该高一些,但在真际使用中几近看没有到成果,果为本身定位ID返回的便是1笔记录,Max几近没有效运作便能获得成果,但如许写更清淅明朗,省往了画蛇那一足.
Select Top 100 * From cyclopedia Where ID>=(
Select Top 90001 Max(ID) From (
Select ID From cyclopedia Order By ID
) As tmp
)
但没有论是真现编制是存贮历程借是直接代码中,瓶颈始末在于MS-SQL的TOP总是要返回前N个记录,这类情
况在数据量没有大时感应感染没有深,但假如成百上千万,功用必定会低下的.相比之下MySQL的limit便有劣势的多
,实施:
Select ID From cyclopedia limit 90000
Select ID From cyclopedia limit 90000,1
的成果别离是:
90000 rows in set (0.36) sec
1 row in set (0.06) sec
而MS-SQL只能用Select Top 90000 ID From cyclopedia
实施时间是390ms,实施一样的把持时间也没有及MySQL的360ms.
limit的offset(偏移量)用于记录较多的时分,记录较少时,偏移offset较小,直接使用limit较劣。offset越大,后者越劣。
1、offset比较小的时分。
select * from yanxue8_visit limit 10,10
多次运转,时间保持在0.0004-0.0005之间
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次运转,时间保持在0.0005-0.0006之间,次假如0.0006
结论:偏移offset较小的时分,直接使用limit较劣。这个隐现是子查询的本果。
2、offset大的时分。
select * from yanxue8_visit limit 10000,10
多次运转,时间保持在0.0187旁边
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次运转,时间保持在0.0061旁边,只要前者的1/3。可以预先offset越大,后者越劣。
//
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行
96-last.
//假如只给定一个参数,它阐扬分解返回最大的记录行数目
http://blog.csdn.net/zhqingyun163/article/details/5053579
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。