我有下面的查询,根据特定标准获取500条记录.事实上有很多行(数百万).我想得到记录的总数,所以我可以说"显示500行......".我可以使用此查询执行此操作吗?目前我有单独的查询来做到这一点但我想知道我是否可以在同一查询中做到这一点.
干杯,
谭
查询:
SELECT * FROM APPL_PERF_STATS
WHERE (GENERIC_METHOD_NAME != 'NULL' AND CURRENT_APPL_ID != 'NULL' AND EVENT_NAME != 'NULL')
AND ROWNUM < 500
AND current_appl_id LIKE '%OrderingGUI%'
AND event_name LIKE '%/ccui%'
AND generic_method_name LIKE '%com.telus.customermgt.service.CustomerMgtSvc.getCustomer%' AND appl_perf_interval_typ_id = 1440
AND cover_period_start_ts >= to_date('06-07-2008 11:53','dd-mm-yyyy HH24:mi')
AND cover_period_start_ts <= to_date('11-08-2009 11:53','dd-mm-yyyy HH24:mi')
ORDER BY CURRENT_APPL_ID, EVENT_NAME, GENERIC_METHOD_NAME, CREATE_TS
Run Code Online (Sandbox Code Playgroud)
在实践中,当我遇到这样的问题时,我通常选择一个比我愿意显示的更多(比如500,所以拉501),如果我达到这个数量,那么告诉用户"返回了超过500条记录",这给出了用户可以优化查询.您可以先运行查询计数,然后返回前n行,但这需要再次访问服务器,并且根据查询复杂性和数据量,可能需要很长时间.
另一种方法是在统计表中添加计数,您可以在执行此查询之前对其进行总结.理论上,您的统计表将保存比主表少得多的数据,因此可以快速地由服务器进行处理.如果您编写一个进程(存储过程最有效)来更新这些进程,然后返回结果.
我不确定您的应用程序或您的用户.但我的一般要么不关心记录的总量,要么只想要记录的总量而不想要细节.