【问题标题】:What is the best approach to getting the last x records? Using MySQL Limit and ORDER DESC?获取最后 x 记录的最佳方法是什么?使用 MySQL 限制和 ORDER DESC?
【发布时间】:2016-04-01 01:23:10
【问题描述】:

我想知道在性能或优化方面是否还有其他最佳/更好的做法。

编辑:我正在使用 PHP7。应该说清楚的,我道歉。我正在为当地的非营利组织做一个志愿者项目,它的设置是这样的:

表:志愿者

pk: v_id

所以我正在做的是: SELECT * from Volunteer ORDER BY v_id DESC LIMIT 25;

(他们希望当前显示最后 25 个“最后日志”报告。)

EDIT2:我现在问这个的唯一原因,我们已经在系统中达到 10k 志愿者日志,我开始意识到他们可以在 MON-FRI 每天添加 50-100(或更多)日志所以它很快就会加起来。

【问题讨论】:

  • 您需要为您的需求提供代码范围,以帮助其他人理解您的问题并轻松回答

标签: php mysql php-7 mysql-select-db


【解决方案1】:

像这样试试,目前为止最简单的一个

Select * from tablename order by column desc limit 5

【讨论】:

  • order by 后面需要一个列名。
  • @Barmar 你是对的,我认为这个问题不符合标准
  • 我在问是否有任何优化要做,因为我准备增加服务器上的负载。
【解决方案2】:

如果你能以编程方式做到这一点 ORDER ASCLIMIT X 然后循环遍历记录。

如果您向我们提供您的语言(PHP、node(javascript)、java 等),我们可以帮助您完成反向循环,但它是这样的:

for(i=rows.length-1;i>=0;i--){
   //do your stuff here
}

如果您必须在 MySQL 中执行此操作

SELECT 你的结果ASCLIMIT X 作为子查询,然后包装在查询ORDER DESC

SELECT
*
FROM
(
    SELECT
    somecol
    FROM
    sometable
    ORDER BY
    the_date ASC
    LIMIT 100
) as a
ORDER BY
the_date DESC

更新:最初提出问题的方式听起来像是您想要最后的 X 结果,订购 DESC。我会留下我的答案,以防其他人来这里寻找答案。

您现在使用ORDER BYLIMIT 执行的操作是最佳方式。要进行优化,您可能只想SELECT 只需要您需要的列,并确保您在 v_id 上有一个唯一索引。如果您需要更多优化,您可能需要考虑归档旧数据并经常清理。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多