Apache Ignite SQL performance COUNT vs SELECT



我有一个Ignite服务器,它有一个持久缓存,我用SQL查询它。我观察到了我无法解释的不同表现:

  1. 使用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);
    
  2. 使用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和具有160K条目的相同缓存,使用#1语句大约需要120ms。而#2语句只需要5毫秒。

我想知道为什么COUNT明显较慢?与在列表中获取整个缓存对象列表然后返回列表大小相比,这不是更有效吗?

count()必须读取整个表才能返回一行。

第二个查询可以在读取表时开始返回行。

我猜您测量的是到第一行的时间,而不是到最后一行

最新更新