Filter those time series metadata whose endTime is less than startTime
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index b45990a..239f7e6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -192,8 +192,8 @@
       if (alignedTimeSeriesMetadata != null) {
         final long t2 = System.nanoTime();
         try {
-          if (alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getStartTime()
-              > alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getEndTime()) {
+          if (alignedTimeSeriesMetadata.getStatistics().getStartTime()
+              > alignedTimeSeriesMetadata.getStatistics().getEndTime()) {
             return null;
           }
           if (globalTimeFilter != null && globalTimeFilter.canSkip(alignedTimeSeriesMetadata)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
index bf30899..757609d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
@@ -129,9 +129,20 @@
         }
         TimeseriesMetadata timeseriesMetadata =
             reader.readTimeseriesMetadata(key.device, key.measurement, ignoreNotExists);
-        return (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0)
-            ? null
-            : timeseriesMetadata;
+        if (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0) {
+          return null;
+        } else if (timeseriesMetadata.getStatistics().getEndTime()
+            < timeseriesMetadata.getStatistics().getStartTime()) {
+          logger.warn(
+              "Found endTime({}) of timeseries metadata statistics{} less than startTime({}), file is {}",
+              timeseriesMetadata.getStatistics().getEndTime(),
+              timeseriesMetadata.getStatistics(),
+              timeseriesMetadata.getStatistics().getStartTime(),
+              key);
+          return null;
+        } else {
+          return timeseriesMetadata;
+        }
       }
 
       TimeseriesMetadata timeseriesMetadata = lruCache.getIfPresent(key);
@@ -185,11 +196,25 @@
                       key.compactionVersion,
                       key.device,
                       metadata.getMeasurementId());
+              long startTime1 = metadata.getStatistics().getStartTime();
+              long endTime1 = metadata.getStatistics().getEndTime();
               if (metadata.getStatistics().getCount() != 0) {
-                lruCache.put(k, metadata);
+                if (endTime1 < startTime1) {
+                  logger.warn(
+                      "Found endTime({}) of timeseries metadata statistics{} less than startTime({}), file is {}",
+                      endTime1,
+                      metadata.getStatistics(),
+                      startTime1,
+                      key);
+                } else {
+                  lruCache.put(k, metadata);
+                }
               }
               if (metadata.getMeasurementId().equals(key.measurement)) {
-                timeseriesMetadata = metadata.getStatistics().getCount() == 0 ? null : metadata;
+                timeseriesMetadata =
+                    (metadata.getStatistics().getCount() == 0 || endTime1 < startTime1)
+                        ? null
+                        : metadata;
               }
             }
           }