apache ignite sql性能计数与选择

jgzswidk  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(426)

我有一个ignite服务器,它有一个持久缓存,我用sql查询它。我观察到不同的表演,我无法解释:
使用sql计数:

String         sql   = "SELECT COUNT(*) AS NUM FROM " + cacheName + " " + sqlParam;
     SqlFieldsQuery query = new SqlFieldsQuery(sql);
     query.setArgs(args);

     FieldsQueryCursor<List<?>> cursor = cache.query(query);
     resultCount = cursor.getAll().get(0).get(0);

使用sql select:

String         sql   = "SELECT _key, _val FROM " + cacheName + " " + sqlParam;
     SqlFieldsQuery query = new SqlFieldsQuery(sql);
     query.setArgs(args);

     FieldsQueryCursor<List<?>> cursor = cache.query(query);
     resultCount = cursor.getAll().size();

在同一个sqlparam和同一个缓存中,使用#1语句的160k个条目大约需要120ms,而#2语句只需要5ms。
我想知道为什么计数要慢得多?与在一个列表中获取整个缓存对象列表,然后返回列表大小相比,这不是更有效吗?

nkoocmlb

nkoocmlb1#

count() 必须读取整个表才能返回一行。
第二个查询可以在读取表时开始返回行。
我猜你是在测量到第一排的时间,而不是最后一排的时间。我认为第二行的速度总体上会慢一些,因为读多行的开销很大。

相关问题