ORDER BY&LIMIT

我有一个如下所示的查询:

SELECT article FROM table1 ORDER BY publish_date LIMIT 20

ORDER BY如何工作? 它会排序所有记录,然后获得前20个,还是会获得20个记录并通过publish_date字段publish_date

如果它是最后一个,你不能保证真正得到最近的20篇文章。


它会先排序,然后得到前20个。数据库还会在ORDER BY之前处理WHERE子句中的任何内容。


LIMIT子句可用于限制SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量(除了使用预准备语句时)。

有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。 初始行的偏移量为0(不是1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15

要从某个偏移量直到结果集的末尾检索所有行,可以使用一些大数目作为第二个参数。 该语句检索从第96行到最后一行的所有行:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

使用一个参数,该值指定了从结果集开头返回的行数:

SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows

换句话说,LIMIT row_count等于LIMIT 0,row_count。

所有详情:http://dev.mysql.com/doc/refman/5.0/en/select.html


如果有合适的索引(在这种情况下,在publish_date字段中),那么MySQL不需要扫描整个索引以获取请求的20条记录 - 这20条记录将在索引的起始处找到。 但是,如果没有合适的索引,则需要对表格进行全面扫描。

有关于此的2009年MySQL性能博客文章。

链接地址: http://www.djcxy.com/p/34269.html

上一篇: ORDER BY & LIMIT

下一篇: SQL multiple column ordering