select与limit使用方法

MySQL中,select与limit的用法说明

1.limit使用简介:

limit关键字可以接受一个或者两个参数,且这个参数需是整数常量,如果两个参数,第一个表示返回记录行的偏移量,第二个表示返回记录行最大的数目;一个的数的话,默认初始记录行为0。

基本用法:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

select与limit使用方法_第1张图片
简单实例:

显示5到10行的记录,即查询6行记录
select * from tablename limit 4,6;

显示第6行的记录
select * from tablename limit 5,1;

查询前n行记录
select * from tablename limit n;

把表通过降序排序,查询前n行记录(可理解成表中最大的n个数)
select * from tablename order by id desc limit n;

select与limit使用方法_第2张图片
limit与子查询
子查询的子查询支持limit,不支持子查询
select * from table where id in (select t.id from (select * from table limit 10)as t);

as表示名一个别名

limit 优化
limit 0 的使用:
根据Limit关键字的定义,如果参数为0的话,则其返回的是空记录。在实际工作中,灵活使用这个0参数,能够给我们带来很大的收获。
想要确认一下某个查询语句的有效性,如果直接运行这个查询语句,需要等待其返回的记录。如果涉及的纪录数量比较多,或者运算逻辑比较复杂,那么需要等到比较长的时间。此时就可以在Select查询语句中,使用Limit 0子句。只要查询语句没有语法上的错误,这就可以让数据库快速的返回一个空集合。从而帮助数据库设计人员迅速的判断查询语句的有效性。另外这个空集和中还会返回某个表的各个字段的字段名称。即通过这个Limit 0子句还可以查询某个表的表结构
select与limit使用方法_第3张图片
可见灵活应用limit 0子句,确实能够给我们带来不小的收益。不过需要注意的是,在某些特定的场合下,这个子句可能不会奏效。如通常情况下,在Monitor工作环境中不支持这个Limit 0子句。此时结果只会显示Empty Set,而不是我们所需要的结果。
在这里插入图片描述
limit与distinct
Distinct关键字主要用来过滤重复的记录。而Limit关键字则主要用来指定记录所返回的行数。这两个关键字共同使用时,如Limit的参数为50,则数据库返回50条不重复的记录数。然后后续的查询就会停止。如果查询的记录中有重复记录,则数据库查询的实际数量往往要比Limit关键字所指定的数量要多

select distinct id from websites limit 5;

select与limit使用方法_第4张图片
MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。在数据量大的时候建议使用子查询优化

limit与索引
如果数据库管理员决定使用Limit子句来指定需要显示的记录数,那么最好能够最大限度的使用索引,以避免全表扫描,提高工作效率。即当数据库选择做完整的表扫描时,可以在某些情况下使用索引。
如现在数据库管理员决定将Limit子句与Order BY子句一起使用。数据库一旦找到了排序结果的第一个RowCount行,则系统将会结束排序,而并不会对整个表进行排序。如果单独使用Order By子句的话,则会对整个表进行排序。虽然如此,但是排序必定要浪费一定的时间。此时数据库管理员如果决定使用索引,则可以在很大程度上提高这个查询的效率。

limit与group by
Group By关键字主要用来对数据进行分类汇总。不过在分类汇总之前,往往需要对数据先进性排序。而Limit语句用来指定显示的结果数量时,往往也需要涉及到纪录的分类汇总与排序的问题。如现在一个学校成绩管理系统中,需要对学生的总分进行排序。即先对学生各科成绩进行汇总,然后显示其排名为前50的纪录。此时就需要同时用到Group By子句和Limit子句。其实从这个案例中我们也可以看出,这两个子句相互依赖的特性。正是因为这种特性(经常相互结合使用),为此结合Group By子句可以提高Limit的查询效率。
这主要是因为两者如果一起使用的话,Limit关键字将不会再重复计算任何不必要的Group By的值。换句话说,在某些情况下,Group By子句能够通过顺序来读取键或者在键上做排序来解决分类汇总时的排序问题,然后再计算摘要直到关键字的值的改变为止。如此的话,两个子句所需要做的一些共同性的工作,只要做一次即可。这就可以从另外一次角度用来提高应用系统的性能。相比先做一个视图对数据进行分类汇总的运算,再使用一个查询语句来抽取特定数量的记录,效率就要高一点。因为后者是将两个子句分开来使用,就无法享受到结合使用所体现的优势。

你可能感兴趣的:(MySQL)