mysql从最后n行中select
我有一个索引(自动增量)和整数值的表。 这张桌子有数百万行。
如何search某个数字是否最有效地出现在表格的最后n行?
从@chaos给出的答案开始,但有一些修改:
-
如果你使用
LIMIT
你应该总是使用ORDER BY
。 RDBMS表没有隐式的顺序保证。 您通常可以按照主键的顺序获取行,但不能依赖于此,也不能移植。 -
如果按降序排列,则不需要事先知道表中的行数。
-
您必须为派生表提供相关名称 (也称为表别名)。
这是我的版本的查询:
SELECT `id` FROM ( SELECT `id`, `val` FROM `big_table` ORDER BY `id` DESC LIMIT $n ) AS t WHERE t.`val` = $certain_number;
像分页一样利用SORT和LIMIT。 如果你想要第ith块的行,使用OFFSET。
SELECT val FROM big_table where val = someval ORDER BY id DESC LIMIT n;
对于Nir的回应:sorting操作不一定会受到惩罚,这取决于查询规划器的function。 由于这个用例对分页性能至关重要,因此有一些优化(参见上面的链接)。 在postgres中也是如此,“ORDER BY … LIMIT可以不用sorting” 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 | +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
最后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
可能是一个非常迟的答案,但这是好的,简单的。
select * from table_name order by id desc limit 5
这个查询将返回你已经插入到表中的最后5个值(最后5行)
因为这是自动增量,这是我的看法:
Select * from tbl where certainconditionshere and autoincfield >= (select max(autoincfield) from tbl) - $n
我知道这可能PDO::lastInsertId
,但尝试使用PDO::lastInsertId
。 我认为它是做你想做的,但是你将不得不重写你的应用程序来使用PDO(这对于攻击来说更安全)