我负责处理的应用程序之一是每隔x秒检查一次Oracle DB表,以查看是否有新数据要处理(其他实时应用程序正在填充该数据)。
我们新的客户业务流程迫使我们的实时性在同一时间(比如说10000)同时每天填充几次记录来填充该表。下次我的应用程序检查是否有任何要处理的内容时,遇到10 000条记录并尝试对其进行处理。
它的设计不是很好,而且扩展性还不够好。快速解决方案是限制该应用程序从Oracle获取的记录数量,下次它将再选择50条(或任何其他内容),依此类推。
如何在Oracle SQL中限制返回记录的数量?订单很重要!
select * from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') order by seq_nr, entry_dts;
select * from (select c.* from cool_table c where date >= to_date('200901010000', 'YYYYMMDDhh24mi') order by seq_nr, entry_dts) where rownum < 50
您需要确保在行数过滤之前完成排序(否则将使用找到的前50行,然后对它们进行排序)