Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Oracle数据分页优化_Performance_Oracle_Pagination - Fatal编程技术网

Performance Oracle数据分页优化

Performance Oracle数据分页优化,performance,oracle,pagination,Performance,Oracle,Pagination,表1和表2每个表有超过200万个数据,当执行此查询需要18秒时,在执行此查询之前,我们应该计算总计数,大约需要7秒,所以它需要25秒以上,有没有优化它的想法?分页通常是一种向人显示结果的机制。没有人愿意读取两百万行数据 因此,如果这个查询确实是向真实的人呈现行,那么您需要解决的是将整个结果的大小减少到人的大小。因此,您需要在数据库中应用额外的过滤器,并返回一个集中的结果集。不仅您的用户会感谢您,您的网络管理员也会感谢您 另一方面,如果这场数据洪流的预期接收者是一台计算机或其他机械设备,那么就给它

表1和表2每个表有超过200万个数据,当执行此查询需要18秒时,在执行此查询之前,我们应该计算总计数,大约需要7秒,所以它需要25秒以上,有没有优化它的想法?

分页通常是一种向人显示结果的机制。没有人愿意读取两百万行数据

因此,如果这个查询确实是向真实的人呈现行,那么您需要解决的是将整个结果的大小减少到人的大小。因此,您需要在数据库中应用额外的过滤器,并返回一个集中的结果集。不仅您的用户会感谢您,您的网络管理员也会感谢您

另一方面,如果这场数据洪流的预期接收者是一台计算机或其他机械设备,那么就给它全部。机器基本上不关心页面,或者如果它们关心电子表格、打印机等,它们有内置的子例程来为我们处理分页

这就给我们留下了一个问题,即原始查询需要很长时间才能执行。在没有任何解释计划或统计数据的情况下,表1中有多少行符合搜索条件?kindid的这些值有多大限制?这是很难解决的

kindid是一种只有三个选项的类型0、1、3

弗诺德。如果KINDID只能有三种选择,那么在WHERE子句中使用它有什么意义


事实上,从WHERE子句中删除它可能会显著提高查询的性能。除非您已经收集了该列的直方图,否则Oracle将假定在0,1,3中会以某种方式限制结果集;然而,只有当大多数行在该列中有空值时,这才是真的。如果是这种情况,最好使用kindid不为null

可能是个问题。@Mat,对不起,我已将此问题发布到该网站。@Mat谢谢您的警告。。从现在起我就不知道国旗的功能了。@Mat,谢谢你的提醒,我已经照你说的做了。真的不知道为什么人们认为这是离题的。这是一个可以通过编程技术解决的问题。是的,我同意,结果显示给人类,也许我应该在第一次访问时添加默认时间过滤器,如果用户添加他们的过滤器,我应该放弃默认过滤器,如果我使用正确的方法?表1大约也有200万行,将来会有更多,kindid是一种只有三个选项0、1、3的类型@空气污染指数
select * from (
 select t_tmp_a.*, rownum t_tmp_id from (
 select  t.*, i.counts  
 from table1 t, (select id, count(id) counts from table2 group by id) i
 where t.id=i.id and t.kindid in (0,1,3) order by t.id desc
) t_tmp_a where rownum <= 20) t_tmp_b where t_tmp_id >= 11;