mysql里面 limit的奇效

Posted 小小的平庸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql里面 limit的奇效相关的知识,希望对你有一定的参考价值。

  项目里面有遇到一个需求,查询一个表,先group by ,再按group 的count(*)进行倒序,取出每个group里面发表时间最新的一个纪录,之前的同事SQL是这样写的

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            table
        WHERE
            id = ?
        AND status = ?
        ORDER BY
            created_time DESC
    ) AS a
GROUP BY
    a.group
ORDER BY
    count(*) DESC
LIMIT 10

  但是呢,最后取出来的数据是乱序的,也就是说该数据在所在的group里面不是发表时间最新的,很奇怪。最后呢,我给这条语句加了一个limit,如下

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            table
        WHERE
            id = ?
        AND status = ?
        ORDER BY
            created_time DESC
        LIMIT 10000
    ) AS a
GROUP BY
    a.group
ORDER BY
    count(*) DESC
LIMIT 10

  虽然说是limit 10000,但是整个表里面实际也就3000多数据,但是这样一来查出来的数据就是group里面最新的数据了。我在想mysql里面的limit是不是像java的volatile那样,具备代码优化保持变量相对位置不变的“奇效”

以上是关于mysql里面 limit的奇效的主要内容,如果未能解决你的问题,请参考以下文章

eval有时候也可以用,而且有奇效

sql sql里面的代码片段

关于mysql表中有大文本limit慢的优化

mysql limit语句

坑,MySQL中 order by 与 limit 混用,分页有BUG!

MySQL 错误:错误使用 UPDATE 和 LIMIT