diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 09e21e1..f03a0e5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -309,6 +309,7 @@
       ExecutionResult result;
       if (clientSession.getSqlDialect() == IClientSession.SqlDialect.TREE) {
         Statement s = StatementGenerator.createStatement(statement, clientSession.getZoneId());
+        LOGGER.info("parse cost {}", (System.nanoTime() - startTime));
 
         if (s == null) {
           return RpcUtils.getTSExecuteStatementResp(
@@ -343,6 +344,7 @@
       } else {
         org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement s =
             relationSqlParser.createStatement(statement, clientSession.getZoneId());
+        LOGGER.info("parse cost {}", (System.nanoTime() - startTime));
 
         if (s instanceof Use) {
           useDatabase = true;
@@ -372,6 +374,8 @@
                 req.getTimeout());
       }
 
+      LOGGER.info("plan cost {}", (System.nanoTime() - startTime));
+
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
           && result.status.code != TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
         finished = true;
@@ -435,6 +439,7 @@
       if (quota != null) {
         quota.close();
       }
+      LOGGER.info("query cost: {}", currentOperationCost);
     }
   }
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java
index 356a632..dd4813d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java
@@ -428,6 +428,7 @@
         value[1] += operatorContext.getNextCalledCount();
       }
       for (Map.Entry<String, long[]> entry : operatorType2TotalCost.entrySet()) {
+        LOGGER.info("driver cost {}: {}", entry.getKey(), entry.getValue());
         QUERY_METRICS.recordOperatorExecutionCost(entry.getKey(), entry.getValue()[0]);
         QUERY_METRICS.recordOperatorExecutionCount(entry.getKey(), entry.getValue()[1]);
       }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 15fe071..c46f1e9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -49,6 +49,7 @@
 import org.apache.tsfile.read.reader.IPageReader;
 import org.apache.tsfile.read.reader.IPointReader;
 import org.apache.tsfile.read.reader.page.AlignedPageReader;
+import org.apache.tsfile.read.reader.page.TablePageReader;
 import org.apache.tsfile.read.reader.series.PaginationController;
 import org.apache.tsfile.utils.Accountable;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -1228,7 +1229,10 @@
       this.version = new MergeReaderPriority(fileTimestamp, version, offset, isSeq);
       this.data = data;
       this.isSeq = isSeq;
-      this.isAligned = data instanceof AlignedPageReader || data instanceof MemAlignedPageReader;
+      this.isAligned =
+          data instanceof AlignedPageReader
+              || data instanceof MemAlignedPageReader
+              || data instanceof TablePageReader;
       this.isMem = data instanceof MemPageReader || data instanceof MemAlignedPageReader;
     }
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
index ab6fb12..ebaa7c0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
@@ -1107,28 +1107,28 @@
   /////////////////////////////////////////////////////////////////////////////////////////////////
   private static final String READ_CHUNK = "read_chunk";
   private static final String ALL = "all";
-  public static final String READ_CHUNK_ALL = READ_CHUNK + "_" + ALL;
+  public static final String READ_CHUNK_CACHE = READ_CHUNK + "_" + CACHE;
   public static final String READ_CHUNK_FILE = READ_CHUNK + "_" + FILE;
-  private Timer readChunkAllTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer readChunkCacheTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
   private Timer readChunkFileTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
 
   private void bindReadChunk(AbstractMetricService metricService) {
-    readChunkAllTimer =
+    readChunkCacheTimer =
         metricService.getOrCreateTimer(
             Metric.SERIES_SCAN_COST.toString(),
             MetricLevel.IMPORTANT,
             Tag.STAGE.toString(),
-            READ_CHUNK,
+            READ_CHUNK_CACHE,
             Tag.TYPE.toString(),
             NULL,
             Tag.FROM.toString(),
-            ALL);
+            CACHE);
     readChunkFileTimer =
         metricService.getOrCreateTimer(
             Metric.SERIES_SCAN_COST.toString(),
             MetricLevel.IMPORTANT,
             Tag.STAGE.toString(),
-            READ_CHUNK,
+            READ_CHUNK_FILE,
             Tag.TYPE.toString(),
             NULL,
             Tag.FROM.toString(),
@@ -1136,16 +1136,16 @@
   }
 
   private void unbindReadChunk(AbstractMetricService metricService) {
-    readChunkAllTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+    readChunkCacheTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
     readChunkFileTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
-    Arrays.asList(ALL, FILE)
+    Arrays.asList(CACHE, FILE)
         .forEach(
             from ->
                 metricService.remove(
                     MetricType.TIMER,
                     Metric.SERIES_SCAN_COST.toString(),
                     Tag.STAGE.toString(),
-                    READ_CHUNK,
+                    READ_CHUNK + "_" + from,
                     Tag.TYPE.toString(),
                     NULL,
                     Tag.FROM.toString(),
@@ -1571,8 +1571,8 @@
       case READ_TIMESERIES_METADATA_FILE:
         readTimeseriesMetadataFileTimer.updateNanos(cost);
         break;
-      case READ_CHUNK_ALL:
-        readChunkAllTimer.updateNanos(cost);
+      case READ_CHUNK_CACHE:
+        readChunkCacheTimer.updateNanos(cost);
         break;
       case READ_CHUNK_FILE:
         readChunkFileTimer.updateNanos(cost);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index b855603..ff13095 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -538,6 +538,7 @@
       logger.debug("[EndFetchSchema]");
       long schemaFetchCost = System.nanoTime() - startTime;
       context.setFetchSchemaCost(schemaFetchCost);
+      logger.info("device fetch cost: {}", schemaFetchCost);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TREE_TYPE, SCHEMA_FETCHER, schemaFetchCost);
     }
@@ -2227,6 +2228,7 @@
       }
     } finally {
       long partitionFetchCost = System.nanoTime() - startTime;
+      logger.info("data partition cost: {}", partitionFetchCost);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TREE_TYPE, PARTITION_FETCHER, partitionFetchCost);
       context.setFetchPartitionCost(partitionFetchCost);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
index 238620b..ea844d1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analyzer.java
@@ -25,11 +25,16 @@
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import static org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.ANALYZER;
 import static org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TREE_TYPE;
 
 /** Analyze the statement and generate Analysis. */
 public class Analyzer {
+  private static final Logger LOGGER = LoggerFactory.getLogger(Analyzer.class);
+
   private final MPPQueryContext context;
 
   private final IPartitionFetcher partitionFetcher;
@@ -52,6 +57,7 @@
     }
 
     if (statement.isQuery()) {
+      LOGGER.info("analyze cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TREE_TYPE, ANALYZER, System.nanoTime() - startTime);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index 4ecddf1..65dc6af 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -303,6 +303,7 @@
 
     if (analysis.isQuery()) {
       long distributionPlanCost = System.nanoTime() - startTime;
+      LOGGER.info("distribution plan cost: {}", distributionPlanCost);
       context.setDistributionPlanCost(distributionPlanCost);
       QUERY_PLAN_COST_METRIC_SET.recordPlanCost(
           TREE_TYPE, DISTRIBUTION_PLANNER, distributionPlanCost);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
index 1a05c5f..503beb6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
@@ -27,6 +27,9 @@
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.util.Arrays;
 import java.util.List;
 
@@ -36,6 +39,8 @@
 /** Generate a logical plan for the statement. */
 public class LogicalPlanner {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(LogicalPlanner.class);
+
   private final MPPQueryContext context;
   private final List<PlanOptimizer> optimizers =
       Arrays.asList(new PredicatePushDown(), new AggregationPushDown());
@@ -54,12 +59,14 @@
 
       long planFinishTime = System.nanoTime();
       context.setLogicalPlanCost(planFinishTime - startTime);
+      LOGGER.info("logical plan cost: {}", planFinishTime - startTime);
 
       for (PlanOptimizer optimizer : optimizers) {
         rootNode = optimizer.optimize(rootNode, analysis, context);
       }
       context.setLogicalOptimizationCost(System.nanoTime() - planFinishTime);
 
+      LOGGER.info("optimize cost: {}", System.nanoTime() - planFinishTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TREE_TYPE, LOGICAL_PLANNER, System.nanoTime() - planFinishTime);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
index 8d25c7a..22a4306 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analyzer.java
@@ -31,6 +31,9 @@
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.util.List;
 import java.util.Map;
 
@@ -40,6 +43,8 @@
 
 public class Analyzer {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(Analyzer.class);
+
   private final StatementAnalyzerFactory statementAnalyzerFactory;
 
   private final MPPQueryContext context;
@@ -92,6 +97,7 @@
 
     analyzer.analyze(statement);
     if (statement instanceof Query) {
+      LOGGER.info("analyze cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, ANALYZER, System.nanoTime() - startTime);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
index 2692690..6d5e2b5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
@@ -64,6 +64,8 @@
 import com.google.common.collect.ImmutableMap;
 import org.apache.tsfile.read.common.type.LongType;
 import org.apache.tsfile.read.common.type.TypeFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -79,6 +81,8 @@
 import static org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager.getTSDataType;
 
 public class TableLogicalPlanner {
+  private static final Logger LOGGER = LoggerFactory.getLogger(TableLogicalPlanner.class);
+
   private final MPPQueryContext queryContext;
   private final SessionInfo sessionInfo;
   private final SymbolAllocator symbolAllocator;
@@ -124,6 +128,7 @@
     PlanNode planNode = planStatement(analysis, statement);
 
     if (statement instanceof Query) {
+      LOGGER.info("logical plan cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, LOGICAL_PLANNER, System.nanoTime() - startTime);
       startTime = System.nanoTime();
@@ -142,6 +147,7 @@
                     warningCollector,
                     PlanOptimizersStatsCollector.createPlanOptimizersStatsCollector()));
       }
+      LOGGER.info("optimize cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, LOGICAL_PLAN_OPTIMIZE, System.nanoTime() - startTime);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
index a485f38..c3d5e06 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanner.java
@@ -19,6 +19,7 @@
 import org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
 import org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
+import org.apache.iotdb.db.queryengine.plan.execution.QueryExecution;
 import org.apache.iotdb.db.queryengine.plan.planner.distribution.WriteFragmentParallelPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.FragmentInstance;
@@ -38,6 +39,8 @@
 import org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PlanOptimizer;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
 import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -51,6 +54,7 @@
 import static org.apache.iotdb.db.queryengine.metric.QueryPlanCostMetricSet.TABLE_TYPE;
 
 public class TableDistributedPlanner {
+  private static final Logger LOGGER = LoggerFactory.getLogger(TableDistributedPlanner.class);
 
   private final Analysis analysis;
   private final SymbolAllocator symbolAllocator;
@@ -104,6 +108,7 @@
     DistributedQueryPlan resultDistributedPlan = generateDistributedPlan(outputNodeWithExchange);
 
     if (analysis.getStatement() instanceof Query) {
+      LOGGER.info("distribution plan cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, DISTRIBUTION_PLANNER, System.nanoTime() - startTime);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
index f9d2d5e..ad8081b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
@@ -61,6 +61,8 @@
 import com.google.common.collect.ImmutableSet;
 import org.apache.tsfile.read.filter.basic.Filter;
 import org.apache.tsfile.utils.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.annotation.Nullable;
 
@@ -120,6 +122,7 @@
  * to be adapted.
  */
 public class PushPredicateIntoTableScan implements PlanOptimizer {
+  private static final Logger LOGGER = LoggerFactory.getLogger(PushPredicateIntoTableScan.class);
 
   private static final IoTDBConfig CONFIG = IoTDBDescriptor.getInstance().getConfig();
 
@@ -439,6 +442,7 @@
               attributeColumns,
               queryContext);
       tableScanNode.setDeviceEntries(deviceEntries);
+      LOGGER.info("device fetch cost: {}", System.nanoTime() - startTime);
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, SCHEMA_FETCHER, System.nanoTime() - startTime);
 
@@ -477,7 +481,7 @@
         } else {
           analysis.upsertDataPartition(dataPartition);
         }
-
+        LOGGER.info("data partition cost: {}", System.nanoTime() - startTime);
         QueryPlanCostMetricSet.getInstance()
             .recordPlanCost(TABLE_TYPE, PARTITION_FETCHER, System.nanoTime() - startTime);
       }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/ClusterScheduler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/ClusterScheduler.java
index 448f082..ec9f635 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/ClusterScheduler.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/ClusterScheduler.java
@@ -136,6 +136,7 @@
       stateMachine.transitionToFailed(e);
       return;
     } finally {
+      logger.info("dispatch cost: {}", System.nanoTime() - startTime);
       QUERY_EXECUTION_METRICS.recordExecutionCost(WAIT_FOR_DISPATCH, System.nanoTime() - startTime);
     }
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
index 5914272..a604409 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
@@ -47,7 +47,7 @@
 import java.util.function.Function;
 import java.util.function.LongConsumer;
 
-import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_ALL;
+import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_CACHE;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_FILE;
 
 /**
@@ -162,11 +162,13 @@
     } finally {
       if (chunkLoader.isCacheMiss()) {
         cacheMissAdder.accept(1);
+        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
+            READ_CHUNK_FILE, System.nanoTime() - startTime);
       } else {
         cacheHitAdder.accept(1);
+        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
+            READ_CHUNK_CACHE, System.nanoTime() - startTime);
       }
-      SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
-          READ_CHUNK_ALL, System.nanoTime() - startTime);
     }
   }
 
