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