我的数据库的sql查询有问题。我想获得特定表的最后n个条目。通常我会执行以下查询:'选择前1000(*)FROM表ORDER BY列DESC',但问题是,该表包含大量数据并且由于订单处理甚至总是在超时中结束如果超时不会发生,我就是不能容忍我的申请延迟。
所以我正在寻找的是一种获取最后一个条目而无需重新排序表的方法! 我只是沉迷于一厢情愿的想法,还是有办法完成这件事?
答案 0 :(得分:4)
没有办法做到这一点。关系数据库不需要以任何特定的顺序保持它们的行......所以,没有办法知道最后一个物理存储的行。您需要使用ORDER BY.
抱歉...
但是,您可以通过一些适当的索引来提高性能。使用索引时,这种事情应该非常快。
答案 1 :(得分:0)
我在巨大的log4net日志表的MESSAGE字段中搜索时遇到了类似的问题。
幸运的是,LOG表有一个时间戳字段,因此我可以通过添加额外的过滤条件和索引来加速查询。
SELECT top 1000 * FROM table WHERE time_stamp >= today
or
SELECT top 1000 * FROM table WHERE id > first_id_today
附加:避免使用(*),尤其是如果你的表中有二进制字段!