diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
index bff12ff..5c1d61d 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
@@ -309,6 +309,60 @@
     return false;
   }
 
+  public PathPatternTree intersectWithFullPathPrefixTree(PathPatternTree fullPathPrefixTree) {
+    PathPatternTree result = new PathPatternTree(containWildcard);
+    List<PartialPath> partialPathList = null;
+
+    for (PartialPath fullPathOrPrefix : fullPathPrefixTree.getAllPathPatterns()) {
+      PathPatternNode<Void, VoidSerializer> curNode = root;
+      PathPatternNode<Void, VoidSerializer> tarNode = result.root;
+      String[] nodes = fullPathOrPrefix.nodes;
+      boolean done = false;
+      if (fullPathOrPrefix.endWithMultiLevelWildcard()) {
+        // if prefix match, directly construct result tree
+        for (int i = 1; i < nodes.length - 1; i++) {
+          done = true;
+          List<PathPatternNode<Void, VoidSerializer>> tmp = curNode.getMatchChildren(nodes[i]);
+          if (tmp.size() == 1 && tmp.get(0).getName().equals(nodes[i])) {
+            curNode = tmp.get(0);
+            if (tarNode.getChildren(nodes[i]) == null) {
+              tarNode.addChild(new PathPatternNode<>(nodes[i], VoidSerializer.getInstance()));
+            }
+            tarNode = tarNode.getChildren(nodes[i]);
+          } else {
+            done = false;
+            break;
+          }
+        }
+      }
+      if (done) {
+        for (PathPatternNode<Void, VoidSerializer> node : curNode.getChildren().values()) {
+          tarNode.addChild(node);
+        }
+      } else {
+        // this branch is to construct intersection one by one
+        if (partialPathList == null) {
+          partialPathList = getAllPathPatterns();
+        }
+        for (PartialPath pathPattern : partialPathList) {
+          if (fullPathOrPrefix.endWithMultiLevelWildcard()) {
+            // prefix
+            for (PartialPath temp : pathPattern.intersectWithPrefixPattern(fullPathOrPrefix)) {
+              result.appendPathPattern(temp);
+            }
+          } else {
+            // full path
+            if (pathPattern.matchFullPath(fullPathOrPrefix)) {
+              result.appendPathPattern(fullPathOrPrefix);
+            }
+          }
+        }
+      }
+    }
+    result.constructTree();
+    return result;
+  }
+
   /////////////////////////////////////////////////////////////////////////////////////////////////
   // serialize & deserialize
   /////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTreeUtils.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTreeUtils.java
index 563cedf..2fa1b16 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTreeUtils.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTreeUtils.java
@@ -19,6 +19,8 @@
 
 package org.apache.iotdb.commons.path;
 
+import org.apache.iotdb.commons.schema.SchemaConstant;
+
 public class PathPatternTreeUtils {
   /**
    * Intersect the pattern tree with the full path prefix tree, and return the intersected pattern
@@ -31,23 +33,9 @@
    */
   public static PathPatternTree intersectWithFullPathPrefixTree(
       PathPatternTree patternTree, PathPatternTree fullPathPrefixTree) {
-    PathPatternTree result = new PathPatternTree();
-    for (PartialPath pathPattern : patternTree.getAllPathPatterns()) {
-      for (PartialPath fullPathOrPrefix : fullPathPrefixTree.getAllPathPatterns()) {
-        if (fullPathOrPrefix.endWithMultiLevelWildcard()) {
-          // prefix
-          for (PartialPath temp : pathPattern.intersectWithPrefixPattern(fullPathOrPrefix)) {
-            result.appendPathPattern(temp);
-          }
-        } else {
-          // full path
-          if (pathPattern.matchFullPath(fullPathOrPrefix)) {
-            result.appendPathPattern(fullPathOrPrefix);
-          }
-        }
-      }
+    if (SchemaConstant.ALL_MATCH_SCOPE.equals(fullPathPrefixTree)) {
+      return patternTree;
     }
-    result.constructTree();
-    return result;
+    return patternTree.intersectWithFullPathPrefixTree(fullPathPrefixTree);
   }
 }
