当前位置:  开发笔记 > 后端 > 正文

mysql从n个最后一行中选择

如何解决《mysql从n个最后一行中选择》经验,为你挑选了4个好方法。

我有一个索引(自动增量)和整数值的表.该表长达数百万行.

如何最有效地搜索表格的最后n行中是否出现某个数字?



1> Bill Karwin..:

从@chaos给出的答案开始,但稍作修改:

ORDER BY如果使用,应始终使用LIMIT.RDBMS表没有保证隐式顺序.您通常可以按主键的顺序获取行,但您不能依赖它,也不能移植.

如果按降序排序,则无需事先知道表中的行数.

您必须为派生表提供相关名称(也称为表别名).

这是我的查询版本:

SELECT `id`
FROM (
    SELECT `id`, `val`
    FROM `big_table`
    ORDER BY `id` DESC
    LIMIT $n
) AS t
WHERE t.`val` = $certain_number;


请注意,我所引用的@chaos的答案已被删除.

2> Suganthan Ma..:

可能是一个非常晚的答案,但这很好,很简单.

select * from table_name order by id desc limit 5

此查询将返回您在表中插入的最后5个值(最后5行)的集合


这提供了什么价值?这个问题在六年前得到了回答.代码段似乎是先前提供的答案的子集,并且没有解释.

3> 小智..:

最后5行在mysql中检索

此查询工作正常

SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC

要么

select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc



4> Dana the San..:

像分页那样充分利用SORT和LIMIT.如果你想要第i个行块,请使用OFFSET.

SELECT val FROM big_table
where val = someval
ORDER BY id DESC
LIMIT n;

响应Nir:排序操作不一定受到惩罚,这取决于查询计划器的功能.由于此用例对分页性能至关重要,因此有一些优化(参见上面的链接).这在postgres中也是如此,"ORDER BY ... LIMIT可以在没有排序的情况下完成" E.7.1.最后一颗子弹

explain extended select id from items where val = 48 order by id desc limit 10;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
|  1 | SIMPLE      | items | const | PRIMARY       | PRIMARY | 4       | const |    1 | Using index | 
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有