MySQL分页与排序语句

MySQL分页与排序语句,第1张

MySQL

LIMIT

接受一个或两个数字参数

参数必须是一个整数常量。

如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,

第二个参数指定返回记录行的最大数目。

初始记录行的偏移量是

0(而不是

1)

下面是一个使用

LIMIT

查询的例子:

SELECT

SALE_DATE,

SUM(SALE_MONEY)

AS

SUM_MONEY

FROM

SALE_REPORT

GROUP

BY

SALE_DATE

ORDER

BY

SUM(SALE_MONEY)

DESC

LIMIT

0,

10

你写的语句是先排序再分页的。

如果你认为不是,就加个子查询:

select * from (select * from tabel as tb order by tb.price desc) temp_table limit 0,20。

分页查询一般 DBA 想到的办法是在某个(如ID,create_time)字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。

因为如果当 LIMIT 子句变成 “LIMIT 1000000,10” 时,你会抱怨:我只取10条记录为什么还是慢?

要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算一次。出现这种性能问题,多数情形下是程序员偷懒了。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。SQL 重新设计如下:

SELECT *

FROM 表

WHERE create_time >'2017-07-04 09:00:00'

ORDER BY create_time limit 10

这样查询时间基本固定,不会随着数据量的增长而发生变化。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5930617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-08
下一篇 2023-03-08

发表评论

登录后才能评论

评论列表(0条)

保存