You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/03/23 01:17:30 UTC
[iotdb] branch master updated: [IOTDB-5715] Improve the performance of query order by time desc
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 788c58dd7b [IOTDB-5715] Improve the performance of query order by time desc
788c58dd7b is described below
commit 788c58dd7b9380e9deae556dcba2f58fe17374f4
Author: Jackie Tien <ja...@gmail.com>
AuthorDate: Thu Mar 23 09:17:23 2023 +0800
[IOTDB-5715] Improve the performance of query order by time desc
---
.../execution/operator/process/join/RowBasedTimeJoinOperator.java | 2 +-
.../mpp/execution/operator/process/join/merge/AscTimeComparator.java | 5 +++++
.../execution/operator/process/join/merge/DescTimeComparator.java | 5 +++++
.../db/mpp/execution/operator/process/join/merge/TimeComparator.java | 3 +++
4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/RowBasedTimeJoinOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/RowBasedTimeJoinOperator.java
index 0cc36c5e51..3f6bf8854c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/RowBasedTimeJoinOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/RowBasedTimeJoinOperator.java
@@ -177,7 +177,7 @@ public class RowBasedTimeJoinOperator extends AbstractConsumeAllOperator {
}
}
tsBlockBuilder.declarePosition();
- } while (currentTime < currentEndTime && !timeSelector.isEmpty());
+ } while (comparator.canContinue(currentTime, currentEndTime) && !timeSelector.isEmpty());
resultTsBlock = tsBlockBuilder.build();
return checkTsBlockSizeAndGetResult();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/AscTimeComparator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/AscTimeComparator.java
index 96d9f86f59..e458b4aff3 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/AscTimeComparator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/AscTimeComparator.java
@@ -30,4 +30,9 @@ public class AscTimeComparator implements TimeComparator {
public long getCurrentEndTime(long time1, long time2) {
return Math.min(time1, time2);
}
+
+ @Override
+ public boolean canContinue(long time, long endTime) {
+ return time < endTime;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/DescTimeComparator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/DescTimeComparator.java
index 67c0112dab..e13661823d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/DescTimeComparator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/DescTimeComparator.java
@@ -30,4 +30,9 @@ public class DescTimeComparator implements TimeComparator {
public long getCurrentEndTime(long time1, long time2) {
return Math.max(time1, time2);
}
+
+ @Override
+ public boolean canContinue(long time, long endTime) {
+ return time > endTime;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/TimeComparator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/TimeComparator.java
index 47eff4fe08..846af9810d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/TimeComparator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/join/merge/TimeComparator.java
@@ -25,4 +25,7 @@ public interface TimeComparator {
/** @return min(time1, time2) if order by time asc, max(time1, time2) if order by desc */
long getCurrentEndTime(long time1, long time2);
+
+ /** @return time < endTime if order by time asc, time > endTime if order by desc */
+ boolean canContinue(long time, long endTime);
}