最高效的计算查询行数的方法

9 浏览
0 Comments

最高效的计算查询行数的方法

我正在使用Hibernate来检索特定查询的行数。假设我有一个名为'Person'的表,其中包含各种列。其中一个列是'name'。

如果我想获取名为'Andrew'的人数,哪种方式最有效?假设其中一些/全部之间存在性能差异。是否有更好的使用Hibernate/SQL的方法来做到这一点?

(1) 选择所有列

Query query = session.createQuery("from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();

(2) 仅选择name列

Query query = session.createQuery("select name from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();

(3) 在查询中使用Count

Query query = session.createQuery("select count(*) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();

(4) 在查询中使用name列进行Count

Query query = session.createQuery("select count(name) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();

编辑:对不起,我的列表中有两个3号。

0
0 Comments

在我公司的情况下,count(*)方法相对于size()方法来说速度要快得多。它在内存上更加高效,因为它不会拉取你不会使用的列数据。我不知道count(name)是否会有所不同。

如果有人想知道,count(*)count(name)的区别是很大的:stackoverflow.com/questions/33480424/…

问题的原因是,对于查询中的行数计数,使用count(*)方法比使用size()方法更高效。这是因为count(*)方法只计算行的数量,而不拉取具体的列数据,从而节省了内存和时间。此外,count(name)方法与count(*)方法也存在差异,并且count(*)方法的性能更好。

解决方法是使用count(*)方法来计算查询的行数。这样可以避免拉取不需要的列数据,提高内存和时间的效率。此外,在某些情况下,count(name)方法和count(*)方法的性能也存在差异,需要根据具体情况进行选择和测试。

对于查询的行数计数,使用count(*)方法是最高效的方法。它不仅在内存和时间上更加高效,还避免了拉取不需要的列数据。在实际使用中,我们还需要根据具体情况选择合适的计数方法,以获得最佳的性能。

0
0 Comments

问题:在查询中计算行数的最高效方法是什么?

原因:在计算查询结果的行数时,使用COUNT()函数的内容越少越好。如果不需要从表中获取任何信息,建议使用COUNT(1)。可以使用COUNT(name)或COUNT(*),只要表的索引设置正确。

解决方法:在大多数数据库系统中,COUNT(*)和COUNT(1)是等效的。但是在PostgreSQL PL/SQL中,至少在我使用的最新版本中是有区别的。在Oracle、MS SQL Server和MySQL中,这两者是等效的。使用COUNT()函数来检查记录是否存在时,对于MS SQL来说,EXISTS()函数比COUNT()更高效。

文章如下:

查询中计算行数的最高效方法是什么?在计算查询结果的行数时,使用COUNT()函数的内容越少越好。如果不需要从表中获取任何信息,建议使用COUNT(1)。可以使用COUNT(name)或COUNT(*),只要表的索引设置正确。

在大多数数据库系统中,COUNT(*)和COUNT(1)是等效的。但是在PostgreSQL PL/SQL中,至少在我使用的最新版本中是有区别的。在Oracle、MS SQL Server和MySQL中,这两者是等效的。这可能仅仅是我的一个坏习惯。

如果你使用COUNT()函数来检查记录是否存在,对于MS SQL来说,EXISTS()函数比COUNT()更高效。

因此,在使用COUNT()函数计算查询结果的行数时,应尽量减少函数内部的内容,选择合适的COUNT()函数形式,并确保表的索引设置正确。对于需要检查记录是否存在的情况,使用EXISTS()函数可能更高效。

0
0 Comments

最有效地计算查询结果的行数的方法是什么?

在Java中,如果您只想计算行数,不要检索结果集,这只会产生无用的开销:

- 您将得到比实际需要的更多的内容(无论是选择所有列还是只选择一个列)

- 您需要将它们通过网络发送

- 您需要为这些结果创建实例(无论是完整的Person实体还是只是一个String)

换句话说,如果您只想计数,请不要在Java端进行计算,因为DBMS对此任务进行了优化,会执行得更好。这不包括(1)和(2)。

关于(3)和(4),请注意通常情况下count(*)count(col)之间的区别:

- count(*)计算所有行的数量

- count(col)计算非空col值的行数

如果col可以为NULL(count(*)更快),则它们将在性能和查询结果上产生不同的结果,否则性能相同。我会使用(3)。

类似的问题:

- [COUNT(*) vs. COUNT(1) vs. COUNT(pk): which is better?](https://stackoverflow.com/questions/2710621)

- [count(*) vs count(column-name) - which is more correct?](https://stackoverflow.com/questions/3003457)

- [Count(*) vs Count(1)](https://stackoverflow.com/questions/1221559)

- [SQL Query: Which one should i use? count(“columnname”), count(1)](https://stackoverflow.com/questions/2004807)

0