【发布时间】:2015-11-04 08:18:30
【问题描述】:
我想优化我的数据库上的某个查询,如果结果 > 500 则不要运行该查询。
从这 2 个中最快的方法是什么:
1)
list = createNativeQuery("select count(0) from (select * from table where rownum <= 501)")
if(list.size() > 500) throw error;
else runQuery();
或 2)
list = createNativeQuery("select * from table where rownum <= 501")
if(list.size() > 500) throw error;
总体而言,计数查询是否比实际获取所有行并计算结果的大小更快并经过优化以运行得更快?
编辑: 在第一种情况下,如果 count(0) 返回 size
【问题讨论】:
-
第二个查询返回多条记录,而第一个查询只返回一条记录。你怎么能比较他们?这个查询呢:
select count(*) from table where rownum <= 501? -
不要试图通过制定规则来调整性能。这甚至是性能成为问题的领域吗?如果是这样,当行数少于 500 行时性能更重要还是行数更多时性能更重要?这些行数中哪一个更常见?
-
我觉得还是让数据库统计行数比较好。在java中获取记录只是增加了不必要的网络使用。
-
在第一种情况下,如果count
-
@Alex 这两个查询大致相似,但这并不是故事的结尾。网络必须处理
select *查询中的许多记录,但只需要处理select count(0)查询中的 1 条记录。
标签: mysql database oracle count rownum