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 2022/12/22 08:19:01 UTC

[iotdb] branch master updated: Eliminate physical plan and Refactor SchemaRegionPlan usage

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 75e85edfe5 Eliminate physical plan and Refactor SchemaRegionPlan usage
75e85edfe5 is described below

commit 75e85edfe529de939133c269fbc21c614df54057
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Thu Dec 22 16:18:54 2022 +0800

    Eliminate physical plan and Refactor SchemaRegionPlan usage
---
 .../schemaregion/rocksdb/RSchemaRegion.java        |  26 +-
 .../rocksdb/RSchemaRegionAdvancedTest.java         | 169 ---------
 .../schemaregion}/rocksdb/MRocksDBBenchmark.java   |   8 +-
 .../schemaregion}/rocksdb/MRocksDBUnitTest.java    |  42 +--
 .../rocksdb/RSchemaReadWriteHandlerTest.java       |   6 +-
 .../rocksdb/RocksDBBenchmarkEngine.java            |  16 +-
 .../rocksdb/RocksDBBenchmarkTask.java              |   0
 .../schemaregion}/rocksdb/RocksDBTestUtils.java    |   4 +-
 .../metadata/tagSchemaRegion/TagSchemaRegion.java  |  21 +-
 .../utils/ShowTimeSeriesResultUtils.java           |   4 +-
 .../tagSchemaRegion/TagSchemaRegionTest.java       |  10 +-
 .../idtable/IDTableWithDeviceIDListImplTest.java   |  17 +-
 .../iotdb/db/metadata/LocalSchemaProcessor.java    |   7 +-
 .../iotdb/db/metadata/mtree/IMTreeBelowSG.java     |  13 +-
 .../db/metadata/mtree/MTreeBelowSGCachedImpl.java  |  56 +--
 .../db/metadata/mtree/MTreeBelowSGMemoryImpl.java  |  55 +--
 .../plan/schemaregion/SchemaRegionPlanType.java    |   7 +-
 .../impl/SchemaRegionPlanDeserializer.java         |   3 +-
 .../impl/read/AbstractShowSchemaPlanImpl.java      |  83 +++++
 .../impl/read/SchemaRegionReadPlanFactory.java     |  75 ++++
 .../impl/read/ShowDevicesPlanImpl.java}            |  37 +-
 .../impl/read/ShowTimeSeriesPlanImpl.java          |  91 +++++
 .../ActivateTemplateInClusterPlanImpl.java         |   6 +-
 .../{ => write}/AutoCreateDeviceMNodePlanImpl.java |   6 +-
 .../impl/{ => write}/ChangeAliasPlanImpl.java      |   6 +-
 .../impl/{ => write}/ChangeTagOffsetPlanImpl.java  |   6 +-
 .../CreateAlignedTimeSeriesPlanImpl.java           |   6 +-
 .../impl/{ => write}/CreateTimeSeriesPlanImpl.java |   6 +-
 .../{ => write}/DeactivateTemplatePlanImpl.java    |   6 +-
 .../impl/{ => write}/DeleteTimeSeriesPlanImpl.java |   6 +-
 .../{ => write}/PreDeactivateTemplatePlanImpl.java |   6 +-
 .../{ => write}/PreDeleteTimeSeriesPlanImpl.java   |   6 +-
 .../RollbackPreDeactivateTemplatePlanImpl.java     |   6 +-
 .../RollbackPreDeleteTimeSeriesPlanImpl.java       |   6 +-
 .../SchemaRegionWritePlanFactory.java}             |   6 +-
 .../IShowDevicesPlan.java}                         |  26 +-
 .../IShowSchemaPlan.java}                          |  33 +-
 .../IShowTimeSeriesPlan.java}                      |  26 +-
 .../schemaregion/result}/ShowDevicesResult.java    |  33 +-
 .../schemaregion/result/ShowSchemaResult.java}     |  32 +-
 .../schemaregion/result/ShowTimeSeriesResult.java  | 114 +++++++
 .../db/metadata/schemaregion/ISchemaRegion.java    |  16 +-
 .../schemaregion/SchemaRegionMemoryImpl.java       |  93 ++---
 .../schemaregion/SchemaRegionSchemaFileImpl.java   |  95 ++----
 .../apache/iotdb/db/metadata/tag/TagManager.java   |   7 +-
 .../metadata/visitor/SchemaExecutionVisitor.java   |   6 +-
 .../operator/schema/DevicesSchemaScanOperator.java |  17 +-
 .../schema/TimeSeriesSchemaScanOperator.java       |  22 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  | 310 -----------------
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  | 380 ---------------------
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   | 287 ----------------
 .../apache/iotdb/db/qp/physical/sys/ShowPlan.java  | 131 -------
 .../db/qp/physical/sys/ShowTimeSeriesPlan.java     | 139 --------
 .../db/query/dataset/ShowTimeSeriesResult.java     | 196 -----------
 .../schemaRegion/SchemaRegionAliasAndTagTest.java  |  19 +-
 .../schemaRegion/SchemaRegionBasicTest.java        |  61 ++--
 .../schemaRegion/SchemaRegionManagementTest.java   |  40 ++-
 .../schemaRegion/SchemaRegionTemplateTest.java     |  28 +-
 .../schemaRegion/SchemaRegionTestUtil.java         |   9 +-
 .../schema/SchemaQueryScanOperatorTest.java        |  19 +-
 .../db/query/dataset/ShowDevicesResultTest.java    |  43 ---
 .../db/query/dataset/ShowTimeSeriesResultTest.java |  70 ----
 .../iotdb/db/query/dataset/SingleDataSetTest.java  | 109 ------
 .../org/apache/iotdb/db/tools/MLogParserTest.java  |   4 +-
 64 files changed, 762 insertions(+), 2431 deletions(-)

diff --git a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index 99fd8bfbc2..b0623d3854 100644
--- a/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++ b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -45,6 +45,10 @@ import org.apache.iotdb.db.metadata.idtable.IDTableManager;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
 import org.apache.iotdb.db.metadata.mnode.MNodeType;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
@@ -59,11 +63,6 @@ import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMeasurementMNode
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaFormatUtils;
 import org.apache.iotdb.db.metadata.utils.MetaUtils;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -1040,7 +1039,7 @@ public class RSchemaRegion implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(IShowDevicesPlan plan)
       throws MetadataException {
     List<ShowDevicesResult> res = Collections.synchronizedList(new ArrayList<>());
     BiFunction<byte[], byte[], Boolean> function =
@@ -1095,24 +1094,24 @@ public class RSchemaRegion implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(IShowTimeSeriesPlan plan)
+      throws MetadataException {
     if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan, context);
+      return showTimeseriesWithIndex(plan);
     } else {
-      return showTimeseriesWithoutIndex(plan, context);
+      return showTimeseriesWithoutIndex(plan);
     }
   }
 
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) {
+      IShowTimeSeriesPlan plan) {
     // temporarily unsupported
     throw new UnsupportedOperationException(
         formatNotSupportInfo(Thread.currentThread().getStackTrace()[1].getMethodName()));
   }
 
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithoutIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+      IShowTimeSeriesPlan plan) throws MetadataException {
 
     List<ShowTimeSeriesResult> res = new LinkedList<>();
     Map<MeasurementPath, Pair<Map<String, String>, Map<String, String>>> measurementPathsAndTags =
@@ -1131,7 +1130,6 @@ public class RSchemaRegion implements ISchemaRegion {
               measurementPath.getMeasurementSchema().getType(),
               measurementPath.getMeasurementSchema().getEncodingType(),
               measurementPath.getMeasurementSchema().getCompressor(),
-              0,
               entry.getValue().left,
               entry.getValue().right,
               deadbandInfo.left,
@@ -1173,7 +1171,7 @@ public class RSchemaRegion implements ISchemaRegion {
     return allResult;
   }
 
-  private IMeasurementMNode getMeasurementMNode(PartialPath fullPath) throws MetadataException {
+  IMeasurementMNode getMeasurementMNode(PartialPath fullPath) throws MetadataException {
     String[] nodes = fullPath.getNodes();
     String key = RSchemaUtils.getLevelPath(nodes, nodes.length - 1);
     IMeasurementMNode node = null;
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaRegionAdvancedTest.java b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaRegionAdvancedTest.java
deleted file mode 100644
index 80ab0250cf..0000000000
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaRegionAdvancedTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
-
-import org.apache.iotdb.commons.consensus.SchemaRegionId;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
-import org.apache.iotdb.db.metadata.mnode.IMNode;
-import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RStorageGroupMNode;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import java.util.Collections;
-
-@Ignore
-public class RSchemaRegionAdvancedTest {
-
-  private static RSchemaRegion schemaRegion = null;
-
-  @Before
-  public void setUp() throws Exception {
-    EnvironmentUtils.envSetUp();
-    PartialPath storageGroupPath = new PartialPath("root.vehicle.s0");
-    SchemaRegionId schemaRegionId = new SchemaRegionId(1);
-    RSchemaReadWriteHandler readWriteHandler = new RSchemaReadWriteHandler();
-    RStorageGroupMNode storageGroupMNode =
-        new RStorageGroupMNode(storageGroupPath.getFullPath(), -1, readWriteHandler);
-    schemaRegion =
-        new RSchemaRegion(
-            storageGroupPath, schemaRegionId, storageGroupMNode, new RSchemaConfLoader());
-
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s0"),
-        TSDataType.INT32,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s1"),
-        TSDataType.INT64,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s2"),
-        TSDataType.FLOAT,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s3"),
-        TSDataType.DOUBLE,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s4"),
-        TSDataType.BOOLEAN,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s0.d0.s5"),
-        TSDataType.TEXT,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s0"),
-        TSDataType.INT32,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s1"),
-        TSDataType.INT64,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s2"),
-        TSDataType.FLOAT,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s3"),
-        TSDataType.DOUBLE,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s4"),
-        TSDataType.BOOLEAN,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s1.d1.s5"),
-        TSDataType.TEXT,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-  }
-
-  @After
-  public void tearDown() throws Exception {
-    EnvironmentUtils.cleanEnv();
-  }
-
-  @Test
-  public void testCache() throws MetadataException {
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s2.d2.s0"),
-        TSDataType.DOUBLE,
-        TSEncoding.RLE,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s2.d2.s1"),
-        TSDataType.BOOLEAN,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s2.d2.s2.g0"),
-        TSDataType.TEXT,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-    schemaRegion.createTimeseries(
-        new PartialPath("root.vehicle.s2.d2.s3"),
-        TSDataType.TEXT,
-        TSEncoding.PLAIN,
-        TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
-
-    IMNode node = schemaRegion.getDeviceNode(new PartialPath("root.vehicle.s0.d0"));
-    Assert.assertEquals(
-        TSDataType.INT32, node.getChild("s0").getAsMeasurementMNode().getSchema().getType());
-
-    Assert.assertFalse(schemaRegion.isPathExist(new PartialPath("root.vehicle.d100")));
-  }
-}
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBBenchmark.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBBenchmark.java
similarity index 92%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBBenchmark.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBBenchmark.java
index 54441c30cf..e213f030b4 100644
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBBenchmark.java
+++ b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBBenchmark.java
@@ -18,11 +18,11 @@
  */
 package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
 
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
-import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
 
 import org.junit.Ignore;
 import org.slf4j.Logger;
@@ -46,9 +46,9 @@ public class MRocksDBBenchmark {
 
   public List<RocksDBBenchmarkTask.BenchmarkResult> benchmarkResults = new ArrayList<>();
 
-  public void testTimeSeriesCreation(List<List<CreateTimeSeriesPlan>> timeSeriesSet)
+  public void testTimeSeriesCreation(List<List<ICreateTimeSeriesPlan>> timeSeriesSet)
       throws IOException {
-    RocksDBBenchmarkTask<List<CreateTimeSeriesPlan>> task =
+    RocksDBBenchmarkTask<List<ICreateTimeSeriesPlan>> task =
         new RocksDBBenchmarkTask<>(timeSeriesSet, RocksDBTestUtils.WRITE_CLIENT_NUM, 100);
     RocksDBBenchmarkTask.BenchmarkResult result =
         task.runBatchWork(
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBUnitTest.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBUnitTest.java
similarity index 88%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBUnitTest.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBUnitTest.java
index 9c65bf3f31..b9403ca070 100644
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBUnitTest.java
+++ b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBUnitTest.java
@@ -20,14 +20,14 @@ package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
 
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.consensus.SchemaRegionId;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
 import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
 import org.apache.iotdb.db.metadata.mnode.InternalMNode;
 import org.apache.iotdb.db.metadata.mnode.MNode;
 import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode;
-import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -40,6 +40,7 @@ import org.junit.Test;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -56,7 +57,7 @@ public class MRocksDBUnitTest {
     MNode root = new InternalMNode(null, IoTDBConstant.PATH_ROOT);
     IStorageGroupMNode storageGroupMNode = new StorageGroupMNode(root, "test", -1);
     rSchemaRegion =
-        new RSchemaRegion(storageGroup, schemaRegionId, storageGroupMNode, new RSchemaConfLoader());
+        new RSchemaRegion(storageGroup, schemaRegionId, new RSchemaConfLoader());
   }
 
   @Test
@@ -102,8 +103,7 @@ public class MRocksDBUnitTest {
     }
 
     rSchemaRegion.createAlignedTimeSeries(
-        new CreateAlignedTimeSeriesPlan(
-            prefixPath, measurements, dataTypes, encodings, compressions, null, null, null));
+            SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(prefixPath, measurements, dataTypes, encodings, compressions, null, null, null));
 
     try {
       PartialPath path = new PartialPath("root.tt.sg.dd.mn");
@@ -137,8 +137,8 @@ public class MRocksDBUnitTest {
 
     // test all timeseries number
     Assert.assertEquals(
-        1, rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.tt.sg.dd.m1"), false));
-    Assert.assertEquals(2, rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), false));
+        1, rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.tt.sg.dd.m1"), Collections.emptyMap(),false));
+    Assert.assertEquals(2, rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), Collections.emptyMap(), false));
 
     // test device number
     Assert.assertEquals(
@@ -152,7 +152,7 @@ public class MRocksDBUnitTest {
 
     // test nodes count in given level
     Assert.assertEquals(
-        2, rSchemaRegion.getNodesCountInGivenLevel(new PartialPath("root.tt.sg"), 3, false));
+        2, rSchemaRegion.getNodesListInGivenLevel(new PartialPath("root.tt.sg"), 3, false).size());
   }
 
   @Test
@@ -195,22 +195,22 @@ public class MRocksDBUnitTest {
     }
 
     Assert.assertEquals(
-        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), false), timeseries.size());
+        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), Collections.emptyMap(), false), timeseries.size());
 
     int count = timeseries.size();
-    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg.d1.*"));
+    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg.d1.*"), false);
     Assert.assertEquals(
-        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), false), count - 2);
+        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), Collections.emptyMap(), false), count - 2);
 
     count = count - 2;
-    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg1.**"));
+    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg1.**"), false);
     Assert.assertEquals(
-        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), false), count - 4);
+        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), Collections.emptyMap(), false), count - 4);
 
     count = count - 4;
-    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg.*.m1"));
+    rSchemaRegion.deleteTimeseries(new PartialPath("root.sg.*.m1"), false);
     Assert.assertEquals(
-        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), false), count - 2);
+        rSchemaRegion.getAllTimeseriesCount(new PartialPath("root.**"), Collections.emptyMap(), false), count - 2);
 
     rSchemaRegion.printScanAllKeys();
   }
@@ -224,7 +224,7 @@ public class MRocksDBUnitTest {
     IMeasurementMNode m1 = rSchemaRegion.getMeasurementMNode(new PartialPath("root.tt.sg.dd.m2"));
     Assert.assertEquals(m1.getAlias(), "ma");
 
-    rSchemaRegion.changeAlias(new PartialPath("root.tt.sg.dd.m2"), "test");
+    rSchemaRegion.upsertAliasAndTagsAndAttributes("test", null, null, new PartialPath("root.tt.sg.dd.m2"));
 
     IMeasurementMNode m2 = rSchemaRegion.getMeasurementMNode(new PartialPath("root.tt.sg.dd.m2"));
     Assert.assertEquals(m2.getAlias(), "test");
@@ -248,14 +248,14 @@ public class MRocksDBUnitTest {
     rSchemaRegion.createTimeseries(
         path4, TSDataType.DOUBLE, TSEncoding.PLAIN, CompressionType.GZIP, null, null);
 
-    Map<PartialPath, Integer> result =
+    Map<PartialPath, Long> result =
         rSchemaRegion.getMeasurementCountGroupByLevel(new PartialPath("root.**"), 3, false);
-    Assert.assertEquals(3, (int) result.get(new PartialPath("root.test.sg.dd")));
-    Assert.assertEquals(1, (int) result.get(new PartialPath("root.test.sg.m4")));
+    Assert.assertEquals(3, (long) result.get(new PartialPath("root.test.sg.dd")));
+    Assert.assertEquals(1, (long) result.get(new PartialPath("root.test.sg.m4")));
 
     result =
         rSchemaRegion.getMeasurementCountGroupByLevel(new PartialPath("root.test.**"), 2, false);
-    Assert.assertEquals(4, (int) result.get(new PartialPath("root.test.sg")));
+    Assert.assertEquals(4, (long) result.get(new PartialPath("root.test.sg")));
   }
 
   @After
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaReadWriteHandlerTest.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandlerTest.java
similarity index 93%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaReadWriteHandlerTest.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandlerTest.java
index b0663e45eb..b9ba52b7f3 100644
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaReadWriteHandlerTest.java
+++ b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandlerTest.java
@@ -18,9 +18,9 @@
  */
 package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
 
-import org.apache.iotdb.db.exception.metadata.IllegalPathException;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
-import org.apache.iotdb.db.metadata.path.PartialPath;
+import org.apache.iotdb.commons.exception.IllegalPathException;
+import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.schemaregion.rocksdb.mnode.RMNodeType;
 
 import org.junit.Assert;
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkEngine.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkEngine.java
similarity index 92%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkEngine.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkEngine.java
index 624b029532..19b98c6e75 100644
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkEngine.java
+++ b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkEngine.java
@@ -18,26 +18,20 @@
  */
 package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
 
+import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.file.SystemFileFactory;
+import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
-import org.apache.iotdb.db.exception.metadata.IllegalPathException;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.metadata.MetadataConstant;
-import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.utils.FileUtils;
 
-import org.apache.commons.lang3.ArrayUtils;
-import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 import static org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaReadWriteHandler.ROCKSDB_PATH;
@@ -67,7 +61,7 @@ public class RocksDBBenchmarkEngine {
   }
 
 //  @Test
-//  public void startTest() {
+  public void startTest() {
 //    RocksDBTestUtils.printMemInfo("Benchmark rocksdb start");
 //    try {
 //      prepareBenchmark();
@@ -83,7 +77,7 @@ public class RocksDBBenchmarkEngine {
 //    } catch (IOException | MetadataException e) {
 //      logger.error("Error happened when run benchmark", e);
 //    }
-//  }
+  }
 
   public void prepareBenchmark() throws IOException {
     long time = System.currentTimeMillis();
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkTask.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkTask.java
similarity index 100%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkTask.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkTask.java
diff --git a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBTestUtils.java b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBTestUtils.java
similarity index 95%
rename from schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBTestUtils.java
rename to schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBTestUtils.java
index 85fd8da08f..5d08db2bde 100644
--- a/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBTestUtils.java
+++ b/schema-engine-rocksdb/src/test/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBTestUtils.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
 
-import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
 
 import java.util.Collection;
 import java.util.List;
@@ -30,7 +30,7 @@ public class RocksDBTestUtils {
 
   public static void printBenchmarkBaseline(
       List storageGroups,
-      List<List<CreateTimeSeriesPlan>> timeSeriesSet,
+      List<List<ICreateTimeSeriesPlan>> timeSeriesSet,
       Collection queryTsSet,
       Collection innerPathSet) {
     System.out.println(
diff --git a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
index 58b0ecc945..89cba91f27 100644
--- a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
+++ b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegion.java
@@ -38,7 +38,11 @@ import org.apache.iotdb.db.metadata.idtable.entry.IDeviceID;
 import org.apache.iotdb.db.metadata.idtable.entry.SHA256DeviceID;
 import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry;
 import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
@@ -53,11 +57,6 @@ import org.apache.iotdb.db.metadata.tagSchemaRegion.utils.MeasurementPathUtils;
 import org.apache.iotdb.db.metadata.tagSchemaRegion.utils.PathTagConverterUtils;
 import org.apache.iotdb.db.metadata.tagSchemaRegion.utils.ShowTimeSeriesResultUtils;
 import org.apache.iotdb.db.metadata.template.Template;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.external.api.ISeriesNumerMonitor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -204,7 +203,7 @@ public class TagSchemaRegion implements ISchemaRegion {
       Map<String, String> props)
       throws MetadataException {
     createTimeseries(
-        SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             path, dataType, encoding, compressor, props, null, null, null),
         0);
   }
@@ -217,7 +216,7 @@ public class TagSchemaRegion implements ISchemaRegion {
       List<CompressionType> compressors)
       throws MetadataException {
     createAlignedTimeSeries(
-        SchemaRegionPlanFactory.getCreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             prefixPath, measurements, dataTypes, encodings, compressors, null, null, null));
   }
 
@@ -479,7 +478,7 @@ public class TagSchemaRegion implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(IShowDevicesPlan plan)
       throws MetadataException {
     throw new UnsupportedOperationException("getMatchedDevices");
   }
@@ -535,8 +534,8 @@ public class TagSchemaRegion implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(IShowTimeSeriesPlan plan)
+      throws MetadataException {
     List<ShowTimeSeriesResult> ShowTimeSeriesResults = new ArrayList<>();
     Pair<List<ShowTimeSeriesResult>, Integer> result = new Pair<>(ShowTimeSeriesResults, 0);
     String path = plan.getPath().getFullPath();
diff --git a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/utils/ShowTimeSeriesResultUtils.java b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/utils/ShowTimeSeriesResultUtils.java
index d91413e81a..fd759bbf36 100644
--- a/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/utils/ShowTimeSeriesResultUtils.java
+++ b/schema-engine-tag/src/main/java/org/apache/iotdb/db/metadata/tagSchemaRegion/utils/ShowTimeSeriesResultUtils.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.db.metadata.tagSchemaRegion.utils;
 
 import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 
 import java.util.HashMap;
 
@@ -44,7 +44,6 @@ public class ShowTimeSeriesResultUtils {
         schemaEntry.getTSDataType(),
         schemaEntry.getTSEncoding(),
         schemaEntry.getCompressionType(),
-        Long.MAX_VALUE,
         new HashMap<>(),
         new HashMap<>(),
         null,
@@ -68,7 +67,6 @@ public class ShowTimeSeriesResultUtils {
         schemaEntry.getTSDataType(),
         schemaEntry.getTSEncoding(),
         schemaEntry.getCompressionType(),
-        Long.MAX_VALUE,
         new HashMap<>(),
         new HashMap<>(),
         null,
diff --git a/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegionTest.java b/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegionTest.java
index a79e476921..8a95d53c09 100644
--- a/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegionTest.java
+++ b/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/TagSchemaRegionTest.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -174,7 +174,7 @@ public class TagSchemaRegionTest {
 
   private void createTimeseries() throws Exception {
     ICreateTimeSeriesPlan createTimeSeriesPlan =
-        SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath(storageGroup + ".tag1.a.tag2.b.s0"),
             TSDataType.valueOf("INT32"),
             TSEncoding.valueOf("RLE"),
@@ -185,7 +185,7 @@ public class TagSchemaRegionTest {
             null);
     tagSchemaRegion.createTimeseries(createTimeSeriesPlan, 0);
     createTimeSeriesPlan =
-        SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath(storageGroup + ".tag1.a.tag2.c.s0"),
             TSDataType.valueOf("INT32"),
             TSEncoding.valueOf("RLE"),
@@ -200,7 +200,7 @@ public class TagSchemaRegionTest {
   private void createAlignedTimeseries() throws Exception {
 
     ICreateAlignedTimeSeriesPlan plan =
-        SchemaRegionPlanFactory.getCreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath(storageGroup + ".tag1.a.tag3.b"),
             Arrays.asList("s1", "s2", "s3"),
             Arrays.asList(
@@ -215,7 +215,7 @@ public class TagSchemaRegionTest {
             null);
     tagSchemaRegion.createAlignedTimeSeries(plan);
     plan =
-        SchemaRegionPlanFactory.getCreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath(storageGroup + ".tag1.x.tag2.y"),
             Arrays.asList("s1", "s2", "s3"),
             Arrays.asList(
diff --git a/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/idtable/IDTableWithDeviceIDListImplTest.java b/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/idtable/IDTableWithDeviceIDListImplTest.java
index 2e9b4ccde8..529d9464c1 100644
--- a/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/idtable/IDTableWithDeviceIDListImplTest.java
+++ b/schema-engine-tag/src/test/java/org/apache/iotdb/db/metadata/tagSchemaRegion/idtable/IDTableWithDeviceIDListImplTest.java
@@ -22,8 +22,9 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.StorageEngineException;
-import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
-import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -153,8 +154,8 @@ public class IDTableWithDeviceIDListImplTest {
   }
 
   private void createAlignedTimeseries() throws Exception {
-    CreateAlignedTimeSeriesPlan plan =
-        new CreateAlignedTimeSeriesPlan(
+    ICreateAlignedTimeSeriesPlan plan =
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath(storageGroup + ".d1.aligned_device"),
             Arrays.asList("s1", "s2", "s3"),
             Arrays.asList(
@@ -169,7 +170,7 @@ public class IDTableWithDeviceIDListImplTest {
             null);
     idTableWithDeviceIDList.createAlignedTimeseries(plan);
     plan =
-        new CreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath(storageGroup + ".d2.aligned_device"),
             Arrays.asList("s1", "s2", "s3"),
             Arrays.asList(
@@ -186,8 +187,8 @@ public class IDTableWithDeviceIDListImplTest {
   }
 
   private void createTimeseries() throws Exception {
-    CreateTimeSeriesPlan createTimeSeriesPlan =
-        new CreateTimeSeriesPlan(
+    ICreateTimeSeriesPlan createTimeSeriesPlan =
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath(storageGroup + ".d1.s0"),
             TSDataType.valueOf("INT32"),
             TSEncoding.valueOf("RLE"),
@@ -198,7 +199,7 @@ public class IDTableWithDeviceIDListImplTest {
             null);
     idTableWithDeviceIDList.createTimeseries(createTimeSeriesPlan);
     createTimeSeriesPlan =
-        new CreateTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath(storageGroup + ".d2.s0"),
             TSDataType.valueOf("INT32"),
             TSEncoding.valueOf("RLE"),
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java b/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
index ebb250b877..a9f51938a4 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/LocalSchemaProcessor.java
@@ -29,10 +29,9 @@ import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException;
 import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
 import org.apache.iotdb.db.localconfignode.LocalConfigNode;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.schemaregion.SchemaEngine;
-import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
-import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -154,7 +153,7 @@ public class LocalSchemaProcessor {
     try {
       getBelongedSchemaRegionWithAutoCreate(path)
           .createTimeseries(
-              new CreateTimeSeriesPlan(
+              SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
                   path, dataType, encoding, compressor, props, null, null, null),
               -1);
     } catch (PathAlreadyExistException
@@ -178,7 +177,7 @@ public class LocalSchemaProcessor {
       throws MetadataException {
     getBelongedSchemaRegionWithAutoCreate(prefixPath)
         .createAlignedTimeSeries(
-            new CreateAlignedTimeSeriesPlan(
+            SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
                 prefixPath, measurements, dataTypes, encodings, compressors, null, null, null));
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
index de4968eefb..e9a459fb5b 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/IMTreeBelowSG.java
@@ -25,11 +25,10 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.mnode.IEntityMNode;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.template.Template;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -149,7 +148,7 @@ public interface IMTreeBelowSG {
   Set<PartialPath> getDevices(PartialPath pathPattern, boolean isPrefixMatch)
       throws MetadataException;
 
-  Pair<List<ShowDevicesResult>, Integer> getDevices(ShowDevicesPlan plan) throws MetadataException;
+  Pair<List<ShowDevicesResult>, Integer> getDevices(IShowDevicesPlan plan) throws MetadataException;
 
   Set<PartialPath> getDevicesByTimeseries(PartialPath timeseries) throws MetadataException;
 
@@ -206,8 +205,8 @@ public interface IMTreeBelowSG {
    * <p>result: [name, alias, database, dataType, encoding, compression, offset] and the current
    * offset
    */
-  Pair<List<Pair<PartialPath, String[]>>, Integer> getAllMeasurementSchema(
-      ShowTimeSeriesPlan plan, QueryContext queryContext) throws MetadataException;
+  Pair<List<Pair<PartialPath, String[]>>, Integer> getAllMeasurementSchema(IShowTimeSeriesPlan plan)
+      throws MetadataException;
 
   /**
    * Get child node path in the next level of the given path pattern.
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
index a3632a38b8..aaf7c8310e 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
@@ -50,13 +50,12 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.EntityCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MNodeLevelCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementGroupByLevelCounter;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaFormatUtils;
 import org.apache.iotdb.db.metadata.utils.MetaUtils;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -68,7 +67,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -79,9 +77,7 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.function.Consumer;
 import java.util.function.Function;
-import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
 import static org.apache.iotdb.commons.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
 
 /**
@@ -727,7 +723,7 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
   }
 
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getDevices(IShowDevicesPlan plan)
       throws MetadataException {
     List<ShowDevicesResult> res = new ArrayList<>();
     EntityCollector<List<ShowDevicesResult>> collector =
@@ -840,19 +836,10 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
    */
   @Override
   public Pair<List<Pair<PartialPath, String[]>>, Integer> getAllMeasurementSchema(
-      ShowTimeSeriesPlan plan, QueryContext queryContext) throws MetadataException {
-    /*
-     There are two conditions and 4 cases.
-     1. isOrderByHeat = false && limit = 0 : just collect all results from each database
-     2. isOrderByHeat = false && limit != 0 : the offset and limit should be updated by each sg after traverse, thus the final result will satisfy the constraints of limit and offset
-     3. isOrderByHeat = true && limit = 0 : collect all result from each database and then sort
-     4. isOrderByHeat = true && limit != 0 : collect top limit result from each sg and then sort them and collect the top limit results start from offset.
-     The offset must be 0, since each sg should collect top limit results. The current limit is the sum of origin limit and offset when passed into metadata module
-    */
-
-    boolean needLast = plan.isOrderByHeat();
-    int limit = needLast ? 0 : plan.getLimit();
-    int offset = needLast ? 0 : plan.getOffset();
+      IShowTimeSeriesPlan plan) throws MetadataException {
+
+    int limit = plan.getLimit();
+    int offset = plan.getOffset();
 
     MeasurementCollector<List<Pair<PartialPath, String[]>>> collector =
         new MeasurementCollector<List<Pair<PartialPath, String[]>>>(
@@ -862,16 +849,15 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
             IMeasurementSchema measurementSchema = node.getSchema();
             Pair<String, String> deadbandInfo =
                 MetaUtils.parseDeadbandInfo(measurementSchema.getProps());
-            String[] tsRow = new String[9];
+            String[] tsRow = new String[8];
             tsRow[0] = node.getAlias();
             tsRow[1] = getStorageGroupNodeInTraversePath(node).getFullPath();
             tsRow[2] = measurementSchema.getType().toString();
             tsRow[3] = measurementSchema.getEncodingType().toString();
             tsRow[4] = measurementSchema.getCompressor().toString();
             tsRow[5] = String.valueOf(node.getOffset());
-            tsRow[6] = null;
-            tsRow[7] = deadbandInfo.left;
-            tsRow[8] = deadbandInfo.right;
+            tsRow[6] = deadbandInfo.left;
+            tsRow[7] = deadbandInfo.right;
             Pair<PartialPath, String[]> temp = new Pair<>(getCurrentPartialPath(node), tsRow);
             resultSet.add(temp);
           }
@@ -883,26 +869,6 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
 
     List<Pair<PartialPath, String[]>> result = collector.getResult();
 
-    if (needLast) {
-      Stream<Pair<PartialPath, String[]>> stream = result.stream();
-
-      limit = plan.getLimit();
-      offset = plan.getOffset();
-
-      stream =
-          stream.sorted(
-              Comparator.comparingLong(
-                      (Pair<PartialPath, String[]> p) -> Long.parseLong(p.right[6]))
-                  .reversed()
-                  .thenComparing((Pair<PartialPath, String[]> p) -> p.left));
-
-      if (limit != 0) {
-        stream = stream.skip(offset).limit(limit);
-      }
-
-      result = stream.collect(toList());
-    }
-
     return new Pair<>(result, collector.getCurOffset() + 1);
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
index 8e863513fe..e288ce1ac8 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGMemoryImpl.java
@@ -50,13 +50,12 @@ import org.apache.iotdb.db.metadata.mtree.traverser.counter.EntityCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MNodeLevelCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementCounter;
 import org.apache.iotdb.db.metadata.mtree.traverser.counter.MeasurementGroupByLevelCounter;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaFormatUtils;
 import org.apache.iotdb.db.metadata.utils.MetaUtils;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -68,7 +67,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -79,9 +77,7 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.function.Consumer;
 import java.util.function.Function;
-import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
 import static org.apache.iotdb.commons.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
 
 /**
@@ -638,7 +634,7 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
   }
 
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getDevices(IShowDevicesPlan plan)
       throws MetadataException {
     List<ShowDevicesResult> res = new ArrayList<>();
     EntityCollector<List<ShowDevicesResult>> collector =
@@ -777,19 +773,9 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
    */
   @Override
   public Pair<List<Pair<PartialPath, String[]>>, Integer> getAllMeasurementSchema(
-      ShowTimeSeriesPlan plan, QueryContext queryContext) throws MetadataException {
-    /*
-     There are two conditions and 4 cases.
-     1. isOrderByHeat = false && limit = 0 : just collect all results from each database
-     2. isOrderByHeat = false && limit != 0 : the offset and limit should be updated by each sg after traverse, thus the final result will satisfy the constraints of limit and offset
-     3. isOrderByHeat = true && limit = 0 : collect all result from each database and then sort
-     4. isOrderByHeat = true && limit != 0 : collect top limit result from each sg and then sort them and collect the top limit results start from offset.
-     The offset must be 0, since each sg should collect top limit results. The current limit is the sum of origin limit and offset when passed into metadata module
-    */
-
-    boolean needLast = plan.isOrderByHeat();
-    int limit = needLast ? 0 : plan.getLimit();
-    int offset = needLast ? 0 : plan.getOffset();
+      IShowTimeSeriesPlan plan) throws MetadataException {
+    int limit = plan.getLimit();
+    int offset = plan.getOffset();
 
     MeasurementCollector<List<Pair<PartialPath, String[]>>> collector =
         new MeasurementCollector<List<Pair<PartialPath, String[]>>>(
@@ -799,16 +785,15 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
             IMeasurementSchema measurementSchema = node.getSchema();
             Pair<String, String> deadbandInfo =
                 MetaUtils.parseDeadbandInfo(measurementSchema.getProps());
-            String[] tsRow = new String[9];
+            String[] tsRow = new String[8];
             tsRow[0] = node.getAlias();
             tsRow[1] = getStorageGroupNodeInTraversePath(node).getFullPath();
             tsRow[2] = measurementSchema.getType().toString();
             tsRow[3] = measurementSchema.getEncodingType().toString();
             tsRow[4] = measurementSchema.getCompressor().toString();
             tsRow[5] = String.valueOf(node.getOffset());
-            tsRow[6] = null;
-            tsRow[7] = deadbandInfo.left;
-            tsRow[8] = deadbandInfo.right;
+            tsRow[6] = deadbandInfo.left;
+            tsRow[7] = deadbandInfo.right;
             Pair<PartialPath, String[]> temp = new Pair<>(getCurrentPartialPath(node), tsRow);
             resultSet.add(temp);
           }
@@ -820,26 +805,6 @@ public class MTreeBelowSGMemoryImpl implements IMTreeBelowSG {
 
     List<Pair<PartialPath, String[]>> result = collector.getResult();
 
-    if (needLast) {
-      Stream<Pair<PartialPath, String[]>> stream = result.stream();
-
-      limit = plan.getLimit();
-      offset = plan.getOffset();
-
-      stream =
-          stream.sorted(
-              Comparator.comparingLong(
-                      (Pair<PartialPath, String[]> p) -> Long.parseLong(p.right[6]))
-                  .reversed()
-                  .thenComparing((Pair<PartialPath, String[]> p) -> p.left));
-
-      if (limit != 0) {
-        stream = stream.skip(offset).limit(limit);
-      }
-
-      result = stream.collect(toList());
-    }
-
     return new Pair<>(result, collector.getCurOffset() + 1);
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/SchemaRegionPlanType.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/SchemaRegionPlanType.java
index 94e9af187e..e6f0601304 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/SchemaRegionPlanType.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/SchemaRegionPlanType.java
@@ -43,9 +43,12 @@ public enum SchemaRegionPlanType {
 
   PRE_DEACTIVATE_TEMPLATE((byte) 0),
   ROLLBACK_PRE_DEACTIVATE_TEMPLATE((byte) 1),
-  DEACTIVATE_TEMPLATE((byte) 2);
+  DEACTIVATE_TEMPLATE((byte) 2),
 
-  public static final int MAX_NUM = Byte.MAX_VALUE;
+  // query plan doesn't need any ser/deSer, thus use one type to represent all
+  READ_SCHEMA(Byte.MAX_VALUE);
+
+  public static final int MAX_NUM = Byte.MAX_VALUE + 1;
   private static final SchemaRegionPlanType[] PLAN_TYPE_TABLE = new SchemaRegionPlanType[MAX_NUM];
 
   static {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanDeserializer.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanDeserializer.java
index f25f59d2de..4fdcd33187 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanDeserializer.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanDeserializer.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.db.metadata.logfile.IDeserializer;
 import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanType;
 import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeAliasPlan;
@@ -64,7 +65,7 @@ public class SchemaRegionPlanDeserializer implements IDeserializer<ISchemaRegion
   @Override
   public ISchemaRegionPlan deserialize(ByteBuffer byteBuffer) {
     ISchemaRegionPlan schemaRegionPlan =
-        SchemaRegionPlanFactory.getEmptyPlan(SchemaRegionPlanType.deserialize(byteBuffer));
+        SchemaRegionWritePlanFactory.getEmptyPlan(SchemaRegionPlanType.deserialize(byteBuffer));
     return schemaRegionPlan.accept(new SchemaRegionPlanDeserializeVisitor(), byteBuffer);
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/AbstractShowSchemaPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/AbstractShowSchemaPlanImpl.java
new file mode 100644
index 0000000000..bb1d2960f6
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/AbstractShowSchemaPlanImpl.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.read;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowSchemaPlan;
+
+import java.util.Objects;
+
+public abstract class AbstractShowSchemaPlanImpl implements IShowSchemaPlan {
+
+  protected final PartialPath path;
+  protected final int limit;
+  protected final int offset;
+  protected final boolean isPrefixMatch;
+
+  public AbstractShowSchemaPlanImpl(PartialPath path) {
+    this.path = path;
+    this.limit = 0;
+    this.offset = 0;
+    this.isPrefixMatch = false;
+  }
+
+  AbstractShowSchemaPlanImpl(PartialPath path, int limit, int offset, boolean isPrefixMatch) {
+    this.path = path;
+    this.limit = limit;
+    this.offset = offset;
+    this.isPrefixMatch = isPrefixMatch;
+  }
+
+  @Override
+  public PartialPath getPath() {
+    return path;
+  }
+
+  @Override
+  public int getLimit() {
+    return limit;
+  }
+
+  @Override
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public boolean isPrefixMatch() {
+    return isPrefixMatch;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    AbstractShowSchemaPlanImpl that = (AbstractShowSchemaPlanImpl) o;
+    return limit == that.limit
+        && offset == that.offset
+        && isPrefixMatch == that.isPrefixMatch
+        && Objects.equals(path, that.path);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(path, limit, offset, isPrefixMatch);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/SchemaRegionReadPlanFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/SchemaRegionReadPlanFactory.java
new file mode 100644
index 0000000000..341b54de40
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/SchemaRegionReadPlanFactory.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.read;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.template.Template;
+
+import java.util.Collections;
+import java.util.Map;
+
+public class SchemaRegionReadPlanFactory {
+
+  private SchemaRegionReadPlanFactory() {}
+
+  public static IShowDevicesPlan getShowDevicesPlan(PartialPath path) {
+    return new ShowDevicesPlanImpl(path, 0, 0, false, false);
+  }
+
+  public static IShowDevicesPlan getShowDevicesPlan(
+      PartialPath path, int limit, int offset, boolean hasSgCol, boolean isPrefixMatch) {
+    return new ShowDevicesPlanImpl(path, limit, offset, hasSgCol, isPrefixMatch);
+  }
+
+  public static IShowTimeSeriesPlan getShowTimeSeriesPlan(PartialPath path) {
+    return new ShowTimeSeriesPlanImpl(path, Collections.emptyMap(), false, null, null, 0, 0, false);
+  }
+
+  public static IShowTimeSeriesPlan getShowTimeSeriesPlan(PartialPath path, int limit, int offset) {
+    return new ShowTimeSeriesPlanImpl(
+        path, Collections.emptyMap(), false, null, null, limit, offset, false);
+  }
+
+  public static IShowTimeSeriesPlan getShowTimeSeriesPlan(
+      PartialPath path, Map<Integer, Template> relatedTemplate) {
+    return new ShowTimeSeriesPlanImpl(path, relatedTemplate, false, null, null, 0, 0, false);
+  }
+
+  public static IShowTimeSeriesPlan getShowTimeSeriesPlan(
+      PartialPath path, boolean isContains, String key, String value) {
+    return new ShowTimeSeriesPlanImpl(
+        path, Collections.emptyMap(), isContains, key, value, 0, 0, false);
+  }
+
+  public static IShowTimeSeriesPlan getShowTimeSeriesPlan(
+      PartialPath path,
+      Map<Integer, Template> relatedTemplate,
+      boolean isContains,
+      String key,
+      String value,
+      int limit,
+      int offset,
+      boolean isPrefixMatch) {
+    return new ShowTimeSeriesPlanImpl(
+        path, relatedTemplate, isContains, key, value, limit, offset, isPrefixMatch);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowDevicesPlan.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowDevicesPlanImpl.java
similarity index 58%
rename from server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowDevicesPlan.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowDevicesPlanImpl.java
index cd1c25ccce..742be6ce70 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowDevicesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowDevicesPlanImpl.java
@@ -15,41 +15,27 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
-package org.apache.iotdb.db.qp.physical.sys;
+
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.read;
 
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
 
-import java.io.DataOutputStream;
-import java.io.IOException;
 import java.util.Objects;
 
-public class ShowDevicesPlan extends ShowPlan {
-
-  public ShowDevicesPlan() {
-    super(ShowContentType.DEVICES);
-  }
-
-  private boolean hasSgCol;
+public class ShowDevicesPlanImpl extends AbstractShowSchemaPlanImpl implements IShowDevicesPlan {
 
-  public ShowDevicesPlan(PartialPath path) {
-    super(ShowContentType.DEVICES, path);
-  }
+  private final boolean hasSgCol;
 
-  public ShowDevicesPlan(PartialPath path, int limit, int offset, boolean hasSgCol) {
-    super(ShowContentType.DEVICES, path, limit, offset);
+  ShowDevicesPlanImpl(
+      PartialPath path, int limit, int offset, boolean hasSgCol, boolean isPrefixMatch) {
+    super(path, limit, offset, isPrefixMatch);
     this.hasSgCol = hasSgCol;
   }
 
   @Override
-  public void serialize(DataOutputStream outputStream) throws IOException {
-    outputStream.write(PhysicalPlanType.SHOW_DEVICES.ordinal());
-    putString(outputStream, path.getFullPath());
-    outputStream.writeInt(limit);
-    outputStream.writeInt(offset);
-    outputStream.writeLong(index);
-  }
-
   public boolean hasSgCol() {
     return hasSgCol;
   }
@@ -58,12 +44,13 @@ public class ShowDevicesPlan extends ShowPlan {
   public boolean equals(Object o) {
     if (this == o) return true;
     if (o == null || getClass() != o.getClass()) return false;
-    ShowDevicesPlan that = (ShowDevicesPlan) o;
+    if (!super.equals(o)) return false;
+    ShowDevicesPlanImpl that = (ShowDevicesPlanImpl) o;
     return hasSgCol == that.hasSgCol;
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(hasSgCol);
+    return Objects.hash(super.hashCode(), hasSgCol);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowTimeSeriesPlanImpl.java
new file mode 100644
index 0000000000..0906b83b34
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/read/ShowTimeSeriesPlanImpl.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.read;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.template.Template;
+
+import java.util.Map;
+import java.util.Objects;
+
+public class ShowTimeSeriesPlanImpl extends AbstractShowSchemaPlanImpl
+    implements IShowTimeSeriesPlan {
+
+  private final Map<Integer, Template> relatedTemplate;
+
+  private final boolean isContains;
+  private final String key;
+  private final String value;
+
+  ShowTimeSeriesPlanImpl(
+      PartialPath path,
+      Map<Integer, Template> relatedTemplate,
+      boolean isContains,
+      String key,
+      String value,
+      int limit,
+      int offset,
+      boolean isPrefixMatch) {
+    super(path, limit, offset, isPrefixMatch);
+    this.relatedTemplate = relatedTemplate;
+    this.isContains = isContains;
+    this.key = key;
+    this.value = value;
+  }
+
+  @Override
+  public boolean isContains() {
+    return isContains;
+  }
+
+  @Override
+  public String getKey() {
+    return key;
+  }
+
+  @Override
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public Map<Integer, Template> getRelatedTemplate() {
+    return relatedTemplate;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    if (!super.equals(o)) return false;
+    ShowTimeSeriesPlanImpl that = (ShowTimeSeriesPlanImpl) o;
+    return isContains == that.isContains
+        && Objects.equals(relatedTemplate, that.relatedTemplate)
+        && Objects.equals(key, that.key)
+        && Objects.equals(value, that.value);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), relatedTemplate, isContains, key, value);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ActivateTemplateInClusterPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ActivateTemplateInClusterPlanImpl.java
similarity index 93%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ActivateTemplateInClusterPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ActivateTemplateInClusterPlanImpl.java
index cb6b60232b..986c84d592 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ActivateTemplateInClusterPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ActivateTemplateInClusterPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
@@ -29,9 +29,9 @@ public class ActivateTemplateInClusterPlanImpl implements IActivateTemplateInClu
   private int templateId;
   private boolean isAligned;
 
-  public ActivateTemplateInClusterPlanImpl() {}
+  ActivateTemplateInClusterPlanImpl() {}
 
-  public ActivateTemplateInClusterPlanImpl(
+  ActivateTemplateInClusterPlanImpl(
       PartialPath activatePath, int templateSetLevel, int templateId) {
     this.activatePath = activatePath;
     this.templateSetLevel = templateSetLevel;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/AutoCreateDeviceMNodePlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/AutoCreateDeviceMNodePlanImpl.java
similarity index 88%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/AutoCreateDeviceMNodePlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/AutoCreateDeviceMNodePlanImpl.java
index 2f1edf2598..1de570e3c6 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/AutoCreateDeviceMNodePlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/AutoCreateDeviceMNodePlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
@@ -26,9 +26,9 @@ public class AutoCreateDeviceMNodePlanImpl implements IAutoCreateDeviceMNodePlan
 
   private PartialPath path;
 
-  public AutoCreateDeviceMNodePlanImpl() {}
+  AutoCreateDeviceMNodePlanImpl() {}
 
-  public AutoCreateDeviceMNodePlanImpl(PartialPath path) {
+  AutoCreateDeviceMNodePlanImpl(PartialPath path) {
     this.path = path;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeAliasPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeAliasPlanImpl.java
similarity index 89%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeAliasPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeAliasPlanImpl.java
index efc3378cd6..0c4bad3808 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeAliasPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeAliasPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeAliasPlan;
@@ -26,9 +26,9 @@ public class ChangeAliasPlanImpl implements IChangeAliasPlan {
   private PartialPath path;
   private String alias;
 
-  public ChangeAliasPlanImpl() {}
+  ChangeAliasPlanImpl() {}
 
-  public ChangeAliasPlanImpl(PartialPath path, String alias) {
+  ChangeAliasPlanImpl(PartialPath path, String alias) {
     this.path = path;
     this.alias = alias;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeTagOffsetPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeTagOffsetPlanImpl.java
similarity index 89%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeTagOffsetPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeTagOffsetPlanImpl.java
index fa3d8345eb..f93384689c 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/ChangeTagOffsetPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/ChangeTagOffsetPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeTagOffsetPlan;
@@ -26,9 +26,9 @@ public class ChangeTagOffsetPlanImpl implements IChangeTagOffsetPlan {
   private PartialPath path;
   private long offset;
 
-  public ChangeTagOffsetPlanImpl() {}
+  ChangeTagOffsetPlanImpl() {}
 
-  public ChangeTagOffsetPlanImpl(PartialPath partialPath, long offset) {
+  ChangeTagOffsetPlanImpl(PartialPath partialPath, long offset) {
     path = partialPath;
     this.offset = offset;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateAlignedTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateAlignedTimeSeriesPlanImpl.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateAlignedTimeSeriesPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateAlignedTimeSeriesPlanImpl.java
index e2119f19ed..6a9aae804a 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateAlignedTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateAlignedTimeSeriesPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
@@ -43,9 +43,9 @@ public class CreateAlignedTimeSeriesPlanImpl implements ICreateAlignedTimeSeries
   private List<Map<String, String>> attributesList;
   private List<Long> tagOffsets = null;
 
-  public CreateAlignedTimeSeriesPlanImpl() {}
+  CreateAlignedTimeSeriesPlanImpl() {}
 
-  public CreateAlignedTimeSeriesPlanImpl(
+  CreateAlignedTimeSeriesPlanImpl(
       PartialPath devicePath,
       List<String> measurements,
       List<TSDataType> dataTypes,
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateTimeSeriesPlanImpl.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateTimeSeriesPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateTimeSeriesPlanImpl.java
index ed349d86ed..d07effae56 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/CreateTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/CreateTimeSeriesPlanImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
@@ -40,9 +40,9 @@ public class CreateTimeSeriesPlanImpl implements ICreateTimeSeriesPlan {
   private Map<String, String> attributes = null;
   private long tagOffset = -1;
 
-  public CreateTimeSeriesPlanImpl() {}
+  CreateTimeSeriesPlanImpl() {}
 
-  public CreateTimeSeriesPlanImpl(
+  CreateTimeSeriesPlanImpl(
       PartialPath path,
       TSDataType dataType,
       TSEncoding encoding,
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeactivateTemplatePlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeactivateTemplatePlanImpl.java
similarity index 88%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeactivateTemplatePlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeactivateTemplatePlanImpl.java
index d0859e2b78..1a27ca280a 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeactivateTemplatePlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeactivateTemplatePlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplatePlan;
@@ -29,9 +29,9 @@ public class DeactivateTemplatePlanImpl implements IDeactivateTemplatePlan {
 
   private Map<PartialPath, List<Integer>> templateSetInfo;
 
-  public DeactivateTemplatePlanImpl() {}
+  DeactivateTemplatePlanImpl() {}
 
-  public DeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
+  DeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
     this.templateSetInfo = templateSetInfo;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeleteTimeSeriesPlanImpl.java
similarity index 88%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeleteTimeSeriesPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeleteTimeSeriesPlanImpl.java
index 92682e4c36..6d60f852a1 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/DeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/DeleteTimeSeriesPlanImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeleteTimeSeriesPlan;
@@ -27,9 +27,9 @@ public class DeleteTimeSeriesPlanImpl implements IDeleteTimeSeriesPlan {
 
   private List<PartialPath> deletePathList;
 
-  public DeleteTimeSeriesPlanImpl() {}
+  DeleteTimeSeriesPlanImpl() {}
 
-  public DeleteTimeSeriesPlanImpl(List<PartialPath> deletePathList) {
+  DeleteTimeSeriesPlanImpl(List<PartialPath> deletePathList) {
     this.deletePathList = deletePathList;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeactivateTemplatePlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeactivateTemplatePlanImpl.java
similarity index 88%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeactivateTemplatePlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeactivateTemplatePlanImpl.java
index 9d240cfbff..7a491a9f64 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeactivateTemplatePlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeactivateTemplatePlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
@@ -29,9 +29,9 @@ public class PreDeactivateTemplatePlanImpl implements IPreDeactivateTemplatePlan
 
   private Map<PartialPath, List<Integer>> templateSetInfo;
 
-  public PreDeactivateTemplatePlanImpl() {}
+  PreDeactivateTemplatePlanImpl() {}
 
-  public PreDeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
+  PreDeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
     this.templateSetInfo = templateSetInfo;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeleteTimeSeriesPlanImpl.java
similarity index 88%
copy from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
copy to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeleteTimeSeriesPlanImpl.java
index 47f44a7740..852419365d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/PreDeleteTimeSeriesPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeleteTimeSeriesPlan;
@@ -26,9 +26,9 @@ public class PreDeleteTimeSeriesPlanImpl implements IPreDeleteTimeSeriesPlan {
 
   private PartialPath path;
 
-  public PreDeleteTimeSeriesPlanImpl() {}
+  PreDeleteTimeSeriesPlanImpl() {}
 
-  public PreDeleteTimeSeriesPlanImpl(PartialPath path) {
+  PreDeleteTimeSeriesPlanImpl(PartialPath path) {
     this.path = path;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeactivateTemplatePlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeactivateTemplatePlanImpl.java
similarity index 87%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeactivateTemplatePlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeactivateTemplatePlanImpl.java
index c9f33d73e0..589d285308 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeactivateTemplatePlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeactivateTemplatePlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
@@ -29,9 +29,9 @@ public class RollbackPreDeactivateTemplatePlanImpl implements IRollbackPreDeacti
 
   private Map<PartialPath, List<Integer>> templateSetInfo;
 
-  public RollbackPreDeactivateTemplatePlanImpl() {}
+  RollbackPreDeactivateTemplatePlanImpl() {}
 
-  public RollbackPreDeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
+  RollbackPreDeactivateTemplatePlanImpl(Map<PartialPath, List<Integer>> templateSetInfo) {
     this.templateSetInfo = templateSetInfo;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeleteTimeSeriesPlanImpl.java
similarity index 87%
copy from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java
copy to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeleteTimeSeriesPlanImpl.java
index 8f21e9fe8a..86872c586c 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/RollbackPreDeleteTimeSeriesPlanImpl.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeleteTimeSeriesPlan;
@@ -26,9 +26,9 @@ public class RollbackPreDeleteTimeSeriesPlanImpl implements IRollbackPreDeleteTi
 
   private PartialPath path;
 
-  public RollbackPreDeleteTimeSeriesPlanImpl() {}
+  RollbackPreDeleteTimeSeriesPlanImpl() {}
 
-  public RollbackPreDeleteTimeSeriesPlanImpl(PartialPath path) {
+  RollbackPreDeleteTimeSeriesPlanImpl(PartialPath path) {
     this.path = path;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/SchemaRegionWritePlanFactory.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/SchemaRegionWritePlanFactory.java
index 792ed3ffb8..fa90207d79 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/write/SchemaRegionWritePlanFactory.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.impl.write;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
@@ -41,9 +41,9 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import java.util.List;
 import java.util.Map;
 
-public class SchemaRegionPlanFactory {
+public class SchemaRegionWritePlanFactory {
 
-  private SchemaRegionPlanFactory() {}
+  private SchemaRegionWritePlanFactory() {}
 
   public static ISchemaRegionPlan getEmptyPlan(SchemaRegionPlanType planType) {
     switch (planType) {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowDevicesPlan.java
similarity index 58%
copy from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
copy to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowDevicesPlan.java
index 47f44a7740..81907f470d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowDevicesPlan.java
@@ -15,30 +15,12 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
-
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeleteTimeSeriesPlan;
-
-public class PreDeleteTimeSeriesPlanImpl implements IPreDeleteTimeSeriesPlan {
-
-  private PartialPath path;
-
-  public PreDeleteTimeSeriesPlanImpl() {}
-
-  public PreDeleteTimeSeriesPlanImpl(PartialPath path) {
-    this.path = path;
-  }
+package org.apache.iotdb.db.metadata.plan.schemaregion.read;
 
-  @Override
-  public PartialPath getPath() {
-    return path;
-  }
+public interface IShowDevicesPlan extends IShowSchemaPlan {
 
-  @Override
-  public void setPath(PartialPath path) {
-    this.path = path;
-  }
+  boolean hasSgCol();
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowSchemaPlan.java
similarity index 57%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowSchemaPlan.java
index 8f21e9fe8a..fb28d91af7 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/RollbackPreDeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowSchemaPlan.java
@@ -15,30 +15,33 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.read;
 
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeleteTimeSeriesPlan;
-
-public class RollbackPreDeleteTimeSeriesPlanImpl implements IRollbackPreDeleteTimeSeriesPlan {
-
-  private PartialPath path;
+import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanType;
+import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor;
 
-  public RollbackPreDeleteTimeSeriesPlanImpl() {}
-
-  public RollbackPreDeleteTimeSeriesPlanImpl(PartialPath path) {
-    this.path = path;
-  }
+public interface IShowSchemaPlan extends ISchemaRegionPlan {
 
   @Override
-  public PartialPath getPath() {
-    return path;
+  default SchemaRegionPlanType getPlanType() {
+    return SchemaRegionPlanType.READ_SCHEMA;
   }
 
   @Override
-  public void setPath(PartialPath path) {
-    this.path = path;
+  default <R, C> R accept(SchemaRegionPlanVisitor<R, C> visitor, C context) {
+    return visitor.visitSchemaRegionPlan(this, context);
   }
+
+  PartialPath getPath();
+
+  int getLimit();
+
+  int getOffset();
+
+  boolean isPrefixMatch();
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowTimeSeriesPlan.java
similarity index 58%
rename from server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowTimeSeriesPlan.java
index 47f44a7740..88326ef070 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/PreDeleteTimeSeriesPlanImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/read/IShowTimeSeriesPlan.java
@@ -15,30 +15,22 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.iotdb.db.metadata.plan.schemaregion.impl;
+package org.apache.iotdb.db.metadata.plan.schemaregion.read;
 
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeleteTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.template.Template;
 
-public class PreDeleteTimeSeriesPlanImpl implements IPreDeleteTimeSeriesPlan {
+import java.util.Map;
 
-  private PartialPath path;
+public interface IShowTimeSeriesPlan extends IShowSchemaPlan {
 
-  public PreDeleteTimeSeriesPlanImpl() {}
+  boolean isContains();
 
-  public PreDeleteTimeSeriesPlanImpl(PartialPath path) {
-    this.path = path;
-  }
+  String getKey();
 
-  @Override
-  public PartialPath getPath() {
-    return path;
-  }
+  String getValue();
 
-  @Override
-  public void setPath(PartialPath path) {
-    this.path = path;
-  }
+  Map<Integer, Template> getRelatedTemplate();
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowDevicesResult.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowDevicesResult.java
similarity index 64%
rename from server/src/main/java/org/apache/iotdb/db/query/dataset/ShowDevicesResult.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowDevicesResult.java
index 70ca5895ac..9755bfee2f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowDevicesResult.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowDevicesResult.java
@@ -16,16 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.query.dataset;
+package org.apache.iotdb.db.metadata.plan.schemaregion.result;
 
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
 import java.util.Objects;
 
-public class ShowDevicesResult extends ShowResult {
+public class ShowDevicesResult extends ShowSchemaResult {
   private boolean isAligned;
 
   public ShowDevicesResult() {
@@ -42,20 +37,6 @@ public class ShowDevicesResult extends ShowResult {
     this.isAligned = isAligned;
   }
 
-  public void serialize(OutputStream outputStream) throws IOException {
-    ReadWriteIOUtils.write(name, outputStream);
-    ReadWriteIOUtils.write(isAligned, outputStream);
-    ReadWriteIOUtils.write(sgName, outputStream);
-  }
-
-  public static ShowDevicesResult deserialize(ByteBuffer buffer) {
-    ShowDevicesResult result = new ShowDevicesResult();
-    result.name = ReadWriteIOUtils.readString(buffer);
-    result.isAligned = ReadWriteIOUtils.readBool(buffer);
-    result.sgName = ReadWriteIOUtils.readString(buffer);
-    return result;
-  }
-
   public boolean isAligned() {
     return isAligned;
   }
@@ -64,12 +45,12 @@ public class ShowDevicesResult extends ShowResult {
   public String toString() {
     return "ShowDevicesResult{"
         + " name='"
-        + name
+        + path
         + '\''
         + ", isAligned = "
         + isAligned
         + ", sgName='"
-        + sgName
+        + database
         + '\''
         + "}";
   }
@@ -83,13 +64,13 @@ public class ShowDevicesResult extends ShowResult {
       return false;
     }
     ShowDevicesResult result = (ShowDevicesResult) o;
-    return Objects.equals(name, result.name)
+    return Objects.equals(path, result.path)
         && isAligned == result.isAligned
-        && Objects.equals(sgName, result.sgName);
+        && Objects.equals(database, result.database);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(name, isAligned, sgName);
+    return Objects.hash(path, isAligned, database);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowResult.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowSchemaResult.java
similarity index 58%
rename from server/src/main/java/org/apache/iotdb/db/query/dataset/ShowResult.java
rename to server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowSchemaResult.java
index c0b1b0b00a..6731ea7e13 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowResult.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowSchemaResult.java
@@ -16,34 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.query.dataset;
+package org.apache.iotdb.db.metadata.plan.schemaregion.result;
 
-public class ShowResult implements Comparable<ShowResult> {
+public abstract class ShowSchemaResult implements Comparable<ShowSchemaResult> {
 
-  protected String name;
-  protected String sgName;
+  protected String path;
+  protected String database;
 
-  public ShowResult(String name, String sgName) {
-    this.name = name;
-    this.sgName = sgName;
+  public ShowSchemaResult(String path, String database) {
+    this.path = path;
+    this.database = database;
   }
 
-  public ShowResult(String name) {
-    this.name = name;
+  public ShowSchemaResult(String path) {
+    this.path = path;
   }
 
-  public ShowResult() {}
+  public ShowSchemaResult() {}
 
-  public String getName() {
-    return name;
+  public String getPath() {
+    return path;
   }
 
-  public String getSgName() {
-    return sgName;
+  public String getDatabase() {
+    return database;
   }
 
   @Override
-  public int compareTo(ShowResult o) {
-    return this.getName().compareTo(o.getName());
+  public int compareTo(ShowSchemaResult o) {
+    return this.getPath().compareTo(o.getPath());
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
new file mode 100644
index 0000000000..bff1f5290e
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/result/ShowTimeSeriesResult.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.metadata.plan.schemaregion.result;
+
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+
+import java.util.Map;
+import java.util.Objects;
+
+public class ShowTimeSeriesResult extends ShowSchemaResult {
+
+  private String alias;
+  private TSDataType dataType;
+  private TSEncoding encoding;
+  private CompressionType compressor;
+  private Map<String, String> tags;
+  private Map<String, String> attributes;
+
+  private String deadband;
+  private String deadbandParameters;
+
+  public ShowTimeSeriesResult(
+      String name,
+      String alias,
+      String sgName,
+      TSDataType dataType,
+      TSEncoding encoding,
+      CompressionType compressor,
+      Map<String, String> tags,
+      Map<String, String> attributes,
+      String deadband,
+      String deadbandParameters) {
+    super(name, sgName);
+    this.alias = alias;
+    this.dataType = dataType;
+    this.encoding = encoding;
+    this.compressor = compressor;
+    this.tags = tags;
+    this.attributes = attributes;
+    this.deadband = deadband;
+    this.deadbandParameters = deadbandParameters;
+  }
+
+  public ShowTimeSeriesResult() {
+    super();
+  }
+
+  public String getAlias() {
+    return alias;
+  }
+
+  public TSDataType getDataType() {
+    return dataType;
+  }
+
+  public TSEncoding getEncoding() {
+    return encoding;
+  }
+
+  public CompressionType getCompressor() {
+    return compressor;
+  }
+
+  public Map<String, String> getTag() {
+    return tags;
+  }
+
+  public Map<String, String> getAttribute() {
+    return attributes;
+  }
+
+  public String getDeadband() {
+    return deadband;
+  }
+
+  public String getDeadbandParameters() {
+    return deadbandParameters;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ShowTimeSeriesResult result = (ShowTimeSeriesResult) o;
+    return Objects.equals(path, result.path);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(path);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
index a11e8356f2..1a76438657 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/ISchemaRegion.java
@@ -25,6 +25,10 @@ import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
@@ -32,11 +36,6 @@ import org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplateP
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
 import org.apache.iotdb.db.metadata.template.Template;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.utils.Pair;
 
 import java.io.File;
@@ -266,7 +265,7 @@ public interface ISchemaRegion {
    * @param plan ShowDevicesPlan which contains the path pattern and restriction params.
    * @return ShowDevicesResult and the current offset of this region after traverse.
    */
-  Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(ShowDevicesPlan plan)
+  Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(IShowDevicesPlan plan)
       throws MetadataException;
   // endregion
 
@@ -305,11 +304,10 @@ public interface ISchemaRegion {
    * Show timeseries.
    *
    * @param plan
-   * @param context
    * @throws MetadataException
    */
-  Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException;
+  Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(IShowTimeSeriesPlan plan)
+      throws MetadataException;
   // endregion
   // endregion
 
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
index 52c3ad704c..353b25e46d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionMemoryImpl.java
@@ -48,8 +48,12 @@ import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGMemoryImpl;
 import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor;
 import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanSerializer;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeAliasPlan;
@@ -67,11 +71,6 @@ import org.apache.iotdb.db.metadata.rescon.SchemaStatisticsManager;
 import org.apache.iotdb.db.metadata.tag.TagManager;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaUtils;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.external.api.ISeriesNumerMonitor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -87,16 +86,13 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
 import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
 
 /**
@@ -745,7 +741,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         measurementMNode.setPreDeleted(true);
         try {
           writeToMLog(
-              SchemaRegionPlanFactory.getPreDeleteTimeSeriesPlan(
+              SchemaRegionWritePlanFactory.getPreDeleteTimeSeriesPlan(
                   measurementMNode.getPartialPath()));
         } catch (IOException e) {
           throw new MetadataException(e);
@@ -767,7 +763,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         measurementMNode.setPreDeleted(false);
         try {
           writeToMLog(
-              SchemaRegionPlanFactory.getRollbackPreDeleteTimeSeriesPlan(
+              SchemaRegionWritePlanFactory.getRollbackPreDeleteTimeSeriesPlan(
                   measurementMNode.getPartialPath()));
         } catch (IOException e) {
           throw new MetadataException(e);
@@ -795,7 +791,8 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         try {
           deleteSingleTimeseriesInBlackList(path);
           writeToMLog(
-              SchemaRegionPlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(path)));
+              SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(
+                  Collections.singletonList(path)));
         } catch (IOException e) {
           throw new MetadataException(e);
         }
@@ -836,7 +833,8 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
   private void deleteSingleTimeseriesInternal(PartialPath p) throws MetadataException, IOException {
     deleteOneTimeseriesUpdateStatistics(p);
     if (!isRecovering) {
-      writeToMLog(SchemaRegionPlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
+      writeToMLog(
+          SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
     }
   }
 
@@ -872,7 +870,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
   private IMNode getDeviceNodeWithAutoCreate(PartialPath path)
       throws IOException, MetadataException {
     IMNode node = mtree.getDeviceNodeWithAutoCreating(path);
-    writeToMLog(SchemaRegionPlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath()));
+    writeToMLog(SchemaRegionWritePlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath()));
     return node;
   }
 
@@ -992,7 +990,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
    * @return ShowDevicesResult and the current offset of this region after traverse.
    */
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(IShowDevicesPlan plan)
       throws MetadataException {
     return mtree.getDevices(plan);
   }
@@ -1049,29 +1047,28 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(IShowTimeSeriesPlan plan)
+      throws MetadataException {
     // show timeseries with index
     if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan, context);
+      return showTimeseriesWithIndex(plan);
     } else {
-      return showTimeseriesWithoutIndex(plan, context);
+      return showTimeseriesWithoutIndex(plan);
     }
   }
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+      IShowTimeSeriesPlan plan) throws MetadataException {
 
-    List<IMeasurementMNode> allMatchedNodes = tagManager.getMatchedTimeseriesInIndex(plan, context);
+    List<IMeasurementMNode> allMatchedNodes = tagManager.getMatchedTimeseriesInIndex(plan);
 
     List<ShowTimeSeriesResult> res = new LinkedList<>();
     PartialPath pathPattern = plan.getPath();
-    boolean needLast = plan.isOrderByHeat();
     int curOffset = -1;
     int count = 0;
-    int limit = needLast ? 0 : plan.getLimit();
-    int offset = needLast ? 0 : plan.getOffset();
+    int limit = plan.getLimit();
+    int offset = plan.getOffset();
 
     for (IMeasurementMNode leaf : allMatchedNodes) {
       if (plan.isPrefixMatch()
@@ -1097,7 +1094,6 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
                   measurementSchema.getType(),
                   measurementSchema.getEncodingType(),
                   measurementSchema.getCompressor(),
-                  0,
                   tagAndAttributePair.left,
                   tagAndAttributePair.right,
                   deadbandInfo.left,
@@ -1112,25 +1108,6 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
       }
     }
 
-    if (needLast) {
-      Stream<ShowTimeSeriesResult> stream = res.stream();
-
-      limit = plan.getLimit();
-      offset = plan.getOffset();
-
-      stream =
-          stream.sorted(
-              Comparator.comparingLong(ShowTimeSeriesResult::getLastTime)
-                  .reversed()
-                  .thenComparing(ShowTimeSeriesResult::getName));
-
-      if (limit != 0) {
-        stream = stream.skip(offset).limit(limit);
-      }
-
-      res = stream.collect(toList());
-    }
-
     return new Pair<>(res, curOffset + 1);
   }
 
@@ -1140,9 +1117,8 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
    * @param plan show time series query plan
    */
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithoutIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
-    Pair<List<Pair<PartialPath, String[]>>, Integer> ans =
-        mtree.getAllMeasurementSchema(plan, context);
+      IShowTimeSeriesPlan plan) throws MetadataException {
+    Pair<List<Pair<PartialPath, String[]>>, Integer> ans = mtree.getAllMeasurementSchema(plan);
     List<ShowTimeSeriesResult> res = new LinkedList<>();
     for (Pair<PartialPath, String[]> ansString : ans.left) {
       long tagFileOffset = Long.parseLong(ansString.right[5]);
@@ -1160,11 +1136,10 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
                 TSDataType.valueOf(ansString.right[2]),
                 TSEncoding.valueOf(ansString.right[3]),
                 CompressionType.valueOf(ansString.right[4]),
-                ansString.right[6] != null ? Long.parseLong(ansString.right[6]) : 0,
                 tagAndAttributePair.left,
                 tagAndAttributePair.right,
-                ansString.right[7],
-                ansString.right[8]));
+                ansString.right[6],
+                ansString.right[7]));
       } catch (IOException e) {
         throw new MetadataException(
             "Something went wrong while deserialize tag info of " + ansString.left.getFullPath(),
@@ -1229,7 +1204,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
     mtree.setAlias(leafMNode, alias);
 
     try {
-      writeToMLog(SchemaRegionPlanFactory.getChangeAliasPlan(path, alias));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeAliasPlan(path, alias));
     } catch (IOException e) {
       throw new MetadataException(e);
     }
@@ -1264,7 +1239,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
     // no tag or attribute, we need to add a new record in log
     if (leafMNode.getOffset() < 0) {
       long offset = tagManager.writeTagFile(tagsMap, attributesMap);
-      writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
       leafMNode.setOffset(offset);
       // update inverted Index map
       if (tagsMap != null && !tagsMap.isEmpty()) {
@@ -1290,7 +1265,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
 
       mtree.setAlias(leafMNode, alias);
       // persist to WAL
-      writeToMLog(SchemaRegionPlanFactory.getChangeAliasPlan(fullPath, alias));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeAliasPlan(fullPath, alias));
     }
   }
 
@@ -1309,7 +1284,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
     // no tag or attribute, we need to add a new record in log
     if (leafMNode.getOffset() < 0) {
       long offset = tagManager.writeTagFile(Collections.emptyMap(), attributesMap);
-      writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
       leafMNode.setOffset(offset);
       return;
     }
@@ -1331,7 +1306,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
     // no tag or attribute, we need to add a new record in log
     if (leafMNode.getOffset() < 0) {
       long offset = tagManager.writeTagFile(tagsMap, Collections.emptyMap());
-      writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
       leafMNode.setOffset(offset);
       // update inverted Index map
       tagManager.addIndex(tagsMap, leafMNode);
@@ -1451,7 +1426,8 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         entityMNode.preDeactivateTemplate();
         preDeactivateNum++;
         try {
-          writeToMLog(SchemaRegionPlanFactory.getPreDeactivateTemplatePlan(subTemplateSetInfo));
+          writeToMLog(
+              SchemaRegionWritePlanFactory.getPreDeactivateTemplatePlan(subTemplateSetInfo));
         } catch (IOException e) {
           throw new MetadataException(e);
         }
@@ -1477,7 +1453,8 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         entityMNode.rollbackPreDeactivateTemplate();
         try {
           writeToMLog(
-              SchemaRegionPlanFactory.getRollbackPreDeactivateTemplatePlan(subTemplateSetInfo));
+              SchemaRegionWritePlanFactory.getRollbackPreDeactivateTemplatePlan(
+                  subTemplateSetInfo));
         } catch (IOException e) {
           throw new MetadataException(e);
         }
@@ -1498,7 +1475,7 @@ public class SchemaRegionMemoryImpl implements ISchemaRegion {
         entityMNode.deactivateTemplate();
         mtree.deleteEmptyInternalMNodeAndReturnEmptyStorageGroup(entityMNode);
         try {
-          writeToMLog(SchemaRegionPlanFactory.getDeactivateTemplatePlan(subTemplateSetInfo));
+          writeToMLog(SchemaRegionWritePlanFactory.getDeactivateTemplatePlan(subTemplateSetInfo));
         } catch (IOException e) {
           throw new MetadataException(e);
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
index 7ce9971c04..8fc8cf6795 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
@@ -46,8 +46,12 @@ import org.apache.iotdb.db.metadata.mtree.MTreeBelowSGCachedImpl;
 import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanVisitor;
 import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanDeserializer;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanSerializer;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowDevicesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeAliasPlan;
@@ -63,11 +67,6 @@ import org.apache.iotdb.db.metadata.rescon.SchemaStatisticsManager;
 import org.apache.iotdb.db.metadata.tag.TagManager;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.metadata.utils.MetaUtils;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.external.api.ISeriesNumerMonitor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -83,15 +82,12 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.toList;
 import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
 
 /**
@@ -627,7 +623,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       throws MetadataException {
     try {
       createTimeseries(
-          SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+          SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
               path, dataType, encoding, compressor, props, null, null, null));
     } catch (PathAlreadyExistException | AliasAlreadyExistException e) {
       if (logger.isDebugEnabled()) {
@@ -647,7 +643,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       List<CompressionType> compressors)
       throws MetadataException {
     createAlignedTimeSeries(
-        SchemaRegionPlanFactory.getCreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             prefixPath, measurements, dataTypes, encodings, compressors, null, null, null));
   }
 
@@ -833,7 +829,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
             measurementMNode.setPreDeleted(true);
             mtree.updateMNode(measurementMNode);
             writeToMLog(
-                SchemaRegionPlanFactory.getPreDeleteTimeSeriesPlan(
+                SchemaRegionWritePlanFactory.getPreDeleteTimeSeriesPlan(
                     measurementMNode.getPartialPath()));
           } catch (IOException e) {
             throw new MetadataException(e);
@@ -856,7 +852,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
           measurementMNode.setPreDeleted(false);
           mtree.updateMNode(measurementMNode);
           writeToMLog(
-              SchemaRegionPlanFactory.getRollbackPreDeleteTimeSeriesPlan(
+              SchemaRegionWritePlanFactory.getRollbackPreDeleteTimeSeriesPlan(
                   measurementMNode.getPartialPath()));
         } catch (IOException e) {
           throw new MetadataException(e);
@@ -886,7 +882,8 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
         try {
           deleteSingleTimeseriesInBlackList(path);
           writeToMLog(
-              SchemaRegionPlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(path)));
+              SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(
+                  Collections.singletonList(path)));
         } catch (IOException e) {
           throw new MetadataException(e);
         }
@@ -922,7 +919,8 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
   private void deleteSingleTimeseriesInternal(PartialPath p) throws MetadataException, IOException {
     deleteOneTimeseriesUpdateStatistics(p);
     if (!isRecovering) {
-      writeToMLog(SchemaRegionPlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
+      writeToMLog(
+          SchemaRegionWritePlanFactory.getDeleteTimeSeriesPlan(Collections.singletonList(p)));
     }
   }
 
@@ -958,7 +956,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
   private IMNode getDeviceNodeWithAutoCreate(PartialPath path)
       throws IOException, MetadataException {
     IMNode node = mtree.getDeviceNodeWithAutoCreating(path);
-    writeToMLog(SchemaRegionPlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath()));
+    writeToMLog(SchemaRegionWritePlanFactory.getAutoCreateDeviceMNodePlan(node.getPartialPath()));
     return node;
   }
 
@@ -1079,7 +1077,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
    * @return ShowDevicesResult and the current offset of this region after traverse.
    */
   @Override
-  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(ShowDevicesPlan plan)
+  public Pair<List<ShowDevicesResult>, Integer> getMatchedDevices(IShowDevicesPlan plan)
       throws MetadataException {
     return mtree.getDevices(plan);
   }
@@ -1124,29 +1122,28 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
   }
 
   @Override
-  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+  public Pair<List<ShowTimeSeriesResult>, Integer> showTimeseries(IShowTimeSeriesPlan plan)
+      throws MetadataException {
     // show timeseries with index
     if (plan.getKey() != null && plan.getValue() != null) {
-      return showTimeseriesWithIndex(plan, context);
+      return showTimeseriesWithIndex(plan);
     } else {
-      return showTimeseriesWithoutIndex(plan, context);
+      return showTimeseriesWithoutIndex(plan);
     }
   }
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+      IShowTimeSeriesPlan plan) throws MetadataException {
 
-    List<IMeasurementMNode> allMatchedNodes = tagManager.getMatchedTimeseriesInIndex(plan, context);
+    List<IMeasurementMNode> allMatchedNodes = tagManager.getMatchedTimeseriesInIndex(plan);
 
     List<ShowTimeSeriesResult> res = new LinkedList<>();
     PartialPath pathPattern = plan.getPath();
-    boolean needLast = plan.isOrderByHeat();
     int curOffset = -1;
     int count = 0;
-    int limit = needLast ? 0 : plan.getLimit();
-    int offset = needLast ? 0 : plan.getOffset();
+    int limit = plan.getLimit();
+    int offset = plan.getOffset();
 
     for (IMeasurementMNode leaf : allMatchedNodes) {
       if (plan.isPrefixMatch()
@@ -1172,7 +1169,6 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
                   measurementSchema.getType(),
                   measurementSchema.getEncodingType(),
                   measurementSchema.getCompressor(),
-                  0,
                   tagAndAttributePair.left,
                   tagAndAttributePair.right,
                   deadbandInfo.left,
@@ -1187,25 +1183,6 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       }
     }
 
-    if (needLast) {
-      Stream<ShowTimeSeriesResult> stream = res.stream();
-
-      limit = plan.getLimit();
-      offset = plan.getOffset();
-
-      stream =
-          stream.sorted(
-              Comparator.comparingLong(ShowTimeSeriesResult::getLastTime)
-                  .reversed()
-                  .thenComparing(ShowTimeSeriesResult::getName));
-
-      if (limit != 0) {
-        stream = stream.skip(offset).limit(limit);
-      }
-
-      res = stream.collect(toList());
-    }
-
     return new Pair<>(res, curOffset + 1);
   }
 
@@ -1215,9 +1192,8 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
    * @param plan show time series query plan
    */
   private Pair<List<ShowTimeSeriesResult>, Integer> showTimeseriesWithoutIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
-    Pair<List<Pair<PartialPath, String[]>>, Integer> ans =
-        mtree.getAllMeasurementSchema(plan, context);
+      IShowTimeSeriesPlan plan) throws MetadataException {
+    Pair<List<Pair<PartialPath, String[]>>, Integer> ans = mtree.getAllMeasurementSchema(plan);
     List<ShowTimeSeriesResult> res = new LinkedList<>();
     for (Pair<PartialPath, String[]> ansString : ans.left) {
       long tagFileOffset = Long.parseLong(ansString.right[5]);
@@ -1235,11 +1211,10 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
                 TSDataType.valueOf(ansString.right[2]),
                 TSEncoding.valueOf(ansString.right[3]),
                 CompressionType.valueOf(ansString.right[4]),
-                ansString.right[6] != null ? Long.parseLong(ansString.right[6]) : 0,
                 tagAndAttributePair.left,
                 tagAndAttributePair.right,
-                ansString.right[7],
-                ansString.right[8]));
+                ansString.right[6],
+                ansString.right[7]));
       } catch (IOException e) {
         throw new MetadataException(
             "Something went wrong while deserialize tag info of " + ansString.left.getFullPath(),
@@ -1317,7 +1292,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
     }
 
     try {
-      writeToMLog(SchemaRegionPlanFactory.getChangeAliasPlan(path, alias));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeAliasPlan(path, alias));
     } catch (IOException e) {
       throw new MetadataException(e);
     }
@@ -1352,7 +1327,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       // no tag or attribute, we need to add a new record in log
       if (leafMNode.getOffset() < 0) {
         long offset = tagManager.writeTagFile(tagsMap, attributesMap);
-        writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+        writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
         leafMNode.setOffset(offset);
         mtree.updateMNode(leafMNode);
         // update inverted Index map
@@ -1383,7 +1358,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
 
       mtree.setAlias(leafMNode, alias);
       // persist to WAL
-      writeToMLog(SchemaRegionPlanFactory.getChangeAliasPlan(fullPath, alias));
+      writeToMLog(SchemaRegionWritePlanFactory.getChangeAliasPlan(fullPath, alias));
     }
   }
 
@@ -1402,7 +1377,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       // no tag or attribute, we need to add a new record in log
       if (leafMNode.getOffset() < 0) {
         long offset = tagManager.writeTagFile(Collections.emptyMap(), attributesMap);
-        writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+        writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
         leafMNode.setOffset(offset);
         mtree.updateMNode(leafMNode);
         return;
@@ -1429,7 +1404,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
       // no tag or attribute, we need to add a new record in log
       if (leafMNode.getOffset() < 0) {
         long offset = tagManager.writeTagFile(tagsMap, Collections.emptyMap());
-        writeToMLog(SchemaRegionPlanFactory.getChangeTagOffsetPlan(fullPath, offset));
+        writeToMLog(SchemaRegionWritePlanFactory.getChangeTagOffsetPlan(fullPath, offset));
         leafMNode.setOffset(offset);
         mtree.updateMNode(leafMNode);
         // update inverted Index map
@@ -1558,7 +1533,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
     Map<PartialPath, List<Integer>> resultTemplateSetInfo =
         mtree.constructSchemaBlackListWithTemplate(plan.getTemplateSetInfo());
     try {
-      writeToMLog(SchemaRegionPlanFactory.getPreDeactivateTemplatePlan(resultTemplateSetInfo));
+      writeToMLog(SchemaRegionWritePlanFactory.getPreDeactivateTemplatePlan(resultTemplateSetInfo));
     } catch (IOException e) {
       throw new MetadataException(e);
     }
@@ -1572,7 +1547,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
         mtree.rollbackSchemaBlackListWithTemplate(plan.getTemplateSetInfo());
     try {
       writeToMLog(
-          SchemaRegionPlanFactory.getRollbackPreDeactivateTemplatePlan(resultTemplateSetInfo));
+          SchemaRegionWritePlanFactory.getRollbackPreDeactivateTemplatePlan(resultTemplateSetInfo));
     } catch (IOException e) {
       throw new MetadataException(e);
     }
@@ -1583,7 +1558,7 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
     Map<PartialPath, List<Integer>> resultTemplateSetInfo =
         mtree.deactivateTemplateInBlackList(plan.getTemplateSetInfo());
     try {
-      writeToMLog(SchemaRegionPlanFactory.getDeactivateTemplatePlan(resultTemplateSetInfo));
+      writeToMLog(SchemaRegionWritePlanFactory.getDeactivateTemplatePlan(resultTemplateSetInfo));
     } catch (IOException e) {
       throw new MetadataException(e);
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
index 66a025a374..f8a64eacbd 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/tag/TagManager.java
@@ -26,8 +26,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.MetadataConstant;
 import org.apache.iotdb.db.metadata.mnode.IMNode;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.metadata.plan.schemaregion.read.IShowTimeSeriesPlan;
 import org.apache.iotdb.tsfile.utils.Pair;
 
 import org.apache.commons.io.FileUtils;
@@ -194,8 +193,8 @@ public class TagManager {
     return timeseries;
   }
 
-  public List<IMeasurementMNode> getMatchedTimeseriesInIndex(
-      ShowTimeSeriesPlan plan, QueryContext context) throws MetadataException {
+  public List<IMeasurementMNode> getMatchedTimeseriesInIndex(IShowTimeSeriesPlan plan)
+      throws MetadataException {
     if (!tagIndex.containsKey(plan.getKey())) {
       return Collections.emptyList();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/visitor/SchemaExecutionVisitor.java b/server/src/main/java/org/apache/iotdb/db/metadata/visitor/SchemaExecutionVisitor.java
index 56b086c32f..e59b116826 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/visitor/SchemaExecutionVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/visitor/SchemaExecutionVisitor.java
@@ -25,7 +25,7 @@ import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
@@ -119,7 +119,7 @@ public class SchemaExecutionVisitor extends PlanVisitor<TSStatus, ISchemaRegion>
 
   private ICreateTimeSeriesPlan transformToCreateTimeSeriesPlan(
       PartialPath devicePath, MeasurementGroup measurementGroup, int index) {
-    return SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+    return SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
         devicePath.concatNode(measurementGroup.getMeasurements().get(index)),
         measurementGroup.getDataTypes().get(index),
         measurementGroup.getEncodings().get(index),
@@ -198,7 +198,7 @@ public class SchemaExecutionVisitor extends PlanVisitor<TSStatus, ISchemaRegion>
     List<TSEncoding> encodingList = measurementGroup.getEncodings();
     List<CompressionType> compressionTypeList = measurementGroup.getCompressors();
     ICreateAlignedTimeSeriesPlan createAlignedTimeSeriesPlan =
-        SchemaRegionPlanFactory.getCreateAlignedTimeSeriesPlan(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             devicePath,
             measurementList,
             dataTypeList,
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/DevicesSchemaScanOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/DevicesSchemaScanOperator.java
index 9eacd6e8cb..c89c924eb2 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/DevicesSchemaScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/DevicesSchemaScanOperator.java
@@ -20,13 +20,13 @@ package org.apache.iotdb.db.mpp.execution.operator.schema;
 
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
 import org.apache.iotdb.db.mpp.common.header.ColumnHeader;
 import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant;
 import org.apache.iotdb.db.mpp.execution.driver.SchemaDriverContext;
 import org.apache.iotdb.db.mpp.execution.operator.OperatorContext;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
@@ -62,7 +62,9 @@ public class DevicesSchemaScanOperator extends SchemaQueryScanOperator {
       List<ShowDevicesResult> schemaRegionResult =
           ((SchemaDriverContext) operatorContext.getInstanceContext().getDriverContext())
               .getSchemaRegion()
-              .getMatchedDevices(convertToPhysicalPlan())
+              .getMatchedDevices(
+                  SchemaRegionReadPlanFactory.getShowDevicesPlan(
+                      partialPath, limit, offset, hasSgCol, false))
               .left;
       return SchemaTsBlockUtil.transferSchemaResultToTsBlockList(
           schemaRegionResult.iterator(), outputDataTypes, this::setColumns);
@@ -71,16 +73,11 @@ public class DevicesSchemaScanOperator extends SchemaQueryScanOperator {
     }
   }
 
-  // ToDo @xinzhongtianxia remove this temporary converter after mpp online
-  private ShowDevicesPlan convertToPhysicalPlan() {
-    return new ShowDevicesPlan(partialPath, limit, offset, hasSgCol);
-  }
-
   private void setColumns(ShowDevicesResult device, TsBlockBuilder builder) {
     builder.getTimeColumnBuilder().writeLong(0L);
-    builder.getColumnBuilder(0).writeBinary(new Binary(device.getName()));
+    builder.getColumnBuilder(0).writeBinary(new Binary(device.getPath()));
     if (hasSgCol) {
-      builder.getColumnBuilder(1).writeBinary(new Binary(device.getSgName()));
+      builder.getColumnBuilder(1).writeBinary(new Binary(device.getDatabase()));
       builder.getColumnBuilder(2).writeBinary(new Binary(String.valueOf(device.isAligned())));
     } else {
       builder.getColumnBuilder(1).writeBinary(new Binary(String.valueOf(device.isAligned())));
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/TimeSeriesSchemaScanOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/TimeSeriesSchemaScanOperator.java
index a7f68a42b8..8ab9473e1e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/TimeSeriesSchemaScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/schema/TimeSeriesSchemaScanOperator.java
@@ -20,14 +20,14 @@ package org.apache.iotdb.db.mpp.execution.operator.schema;
 
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.db.mpp.common.header.ColumnHeader;
 import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant;
 import org.apache.iotdb.db.mpp.execution.driver.SchemaDriverContext;
 import org.apache.iotdb.db.mpp.execution.operator.OperatorContext;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
@@ -94,7 +94,9 @@ public class TimeSeriesSchemaScanOperator extends SchemaQueryScanOperator {
       List<ShowTimeSeriesResult> schemaRegionResult =
           ((SchemaDriverContext) operatorContext.getInstanceContext().getDriverContext())
               .getSchemaRegion()
-              .showTimeseries(convertToPhysicalPlan(), operatorContext.getInstanceContext())
+              .showTimeseries(
+                  SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
+                      partialPath, templateMap, isContains, key, value, limit, offset, false))
               .left;
       return SchemaTsBlockUtil.transferSchemaResultToTsBlockList(
           schemaRegionResult.iterator(), outputDataTypes, this::setColumns);
@@ -103,19 +105,11 @@ public class TimeSeriesSchemaScanOperator extends SchemaQueryScanOperator {
     }
   }
 
-  // ToDo @xinzhongtianxia remove this temporary converter after mpp online
-  private ShowTimeSeriesPlan convertToPhysicalPlan() {
-    ShowTimeSeriesPlan plan =
-        new ShowTimeSeriesPlan(partialPath, isContains, key, value, limit, offset, false);
-    plan.setRelatedTemplate(templateMap);
-    return plan;
-  }
-
   private void setColumns(ShowTimeSeriesResult series, TsBlockBuilder builder) {
-    builder.getTimeColumnBuilder().writeLong(series.getLastTime());
-    builder.writeNullableText(0, series.getName());
+    builder.getTimeColumnBuilder().writeLong(0);
+    builder.writeNullableText(0, series.getPath());
     builder.writeNullableText(1, series.getAlias());
-    builder.writeNullableText(2, series.getSgName());
+    builder.writeNullableText(2, series.getDatabase());
     builder.writeNullableText(3, series.getDataType().toString());
     builder.writeNullableText(4, series.getEncoding().toString());
     builder.writeNullableText(5, series.getCompressor().toString());
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
deleted file mode 100644
index 7a53b2a978..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.qp.physical;
-
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.exception.runtime.SerializationRunTimeException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.consensus.common.request.IConsensusRequest;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
-import org.apache.iotdb.db.qp.logical.Operator;
-import org.apache.iotdb.tsfile.utils.PublicBAOS;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.BufferOverflowException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/** This class is an abstract class for all type of PhysicalPlan. */
-public abstract class PhysicalPlan implements IConsensusRequest {
-  private static final Logger logger = LoggerFactory.getLogger(PhysicalPlan.class);
-
-  private static final String SERIALIZATION_UNIMPLEMENTED = "serialization unimplemented";
-
-  private boolean isQuery = false;
-
-  private Operator.OperatorType operatorType;
-
-  // for cluster mode, whether the plan may be splitted into several sub plans
-  protected boolean canBeSplit = true;
-
-  // login username, corresponding to cli/session login user info
-  private String loginUserName;
-
-  // a bridge from a cluster raft log to a physical plan
-  protected long index;
-
-  private boolean debug;
-
-  /**
-   * Since IoTDB v0.13, all DDL and DML use patternMatch as default. Before IoTDB v0.13, all DDL and
-   * DML use prefixMatch.
-   */
-  private boolean isPrefixMatch = false;
-
-  /** whether the plan can be split into more than one Plans. Only used in the cluster mode. */
-  public boolean canBeSplit() {
-    return canBeSplit;
-  }
-
-  protected PhysicalPlan() {}
-
-  protected PhysicalPlan(Operator.OperatorType operatorType) {
-    this.operatorType = operatorType;
-  }
-
-  public abstract List<? extends PartialPath> getPaths();
-
-  public void setPaths(List<PartialPath> paths) {}
-
-  public boolean isQuery() {
-    return isQuery;
-  }
-
-  public boolean isSelectInto() {
-    return false;
-  }
-
-  public Operator.OperatorType getOperatorType() {
-    return operatorType;
-  }
-
-  public String getOperatorName() {
-    return operatorType.toString();
-  }
-
-  public void setOperatorType(Operator.OperatorType operatorType) {
-    this.operatorType = operatorType;
-  }
-
-  public List<String> getAggregations() {
-    return Collections.emptyList();
-  }
-
-  public void setQuery(boolean query) {
-    isQuery = query;
-  }
-
-  public boolean isDebug() {
-    return debug;
-  }
-
-  public void setDebug(boolean debug) {
-    this.debug = debug;
-  }
-
-  /**
-   * Serialize the plan into the given buffer. All necessary fields will be serialized.
-   *
-   * @param stream
-   * @throws IOException
-   */
-  public void serialize(DataOutputStream stream) throws IOException {
-    throw new UnsupportedOperationException(SERIALIZATION_UNIMPLEMENTED);
-  }
-
-  @Override
-  public ByteBuffer serializeToByteBuffer() {
-    try (PublicBAOS byteArrayOutputStream = new PublicBAOS();
-        DataOutputStream outputStream = new DataOutputStream(byteArrayOutputStream)) {
-      serialize(outputStream);
-      return ByteBuffer.wrap(byteArrayOutputStream.getBuf(), 0, byteArrayOutputStream.size());
-    } catch (IOException e) {
-      logger.error("Unexpected error occurs when serializing this physical plan.", e);
-      throw new SerializationRunTimeException(e);
-    }
-  }
-
-  public void deserialize(DataInputStream stream) throws IOException, IllegalPathException {
-    throw new UnsupportedOperationException(SERIALIZATION_UNIMPLEMENTED);
-  }
-
-  /**
-   * Serialize the plan into the given buffer. This is provided for WAL, so fields that can be
-   * recovered will not be serialized. If error occurs when serializing this plan, the buffer will
-   * be reset.
-   *
-   * @param buffer
-   */
-  public final void serialize(ByteBuffer buffer) {
-    buffer.mark();
-    try {
-      serializeImpl(buffer);
-    } catch (UnsupportedOperationException e) {
-      // ignore and throw
-      throw e;
-    } catch (BufferOverflowException e) {
-      buffer.reset();
-      throw e;
-    } catch (Exception e) {
-      logger.error(
-          "Rollback buffer entry because error occurs when serializing this physical plan.", e);
-      buffer.reset();
-      throw e;
-    }
-  }
-
-  protected void serializeImpl(ByteBuffer buffer) {
-    throw new UnsupportedOperationException(SERIALIZATION_UNIMPLEMENTED);
-  }
-
-  protected void putString(ByteBuffer buffer, String value) {
-    ReadWriteIOUtils.write(value, buffer);
-  }
-
-  protected void putStrings(ByteBuffer buffer, List<String> values) {
-    for (String value : values) {
-      putString(buffer, value);
-    }
-  }
-
-  protected void putString(DataOutputStream stream, String value) throws IOException {
-    ReadWriteIOUtils.write(value, stream);
-  }
-
-  protected void putStrings(DataOutputStream stream, List<String> values) throws IOException {
-    for (String value : values) {
-      putString(stream, value);
-    }
-  }
-
-  protected String readString(ByteBuffer buffer) {
-    return ReadWriteIOUtils.readString(buffer);
-  }
-
-  protected List<String> readStrings(ByteBuffer buffer, int totalSize) {
-    List<String> result = new ArrayList<>(totalSize);
-    for (int i = 0; i < totalSize; i++) {
-      result.add(readString(buffer));
-    }
-    return result;
-  }
-
-  public boolean isAuthenticationRequired() {
-    return true;
-  }
-
-  /** Used to check whether a user has the permission to execute the plan with these paths. */
-  public List<? extends PartialPath> getAuthPaths() {
-    return getPaths();
-  }
-
-  /** If you want to add new PhysicalPlanType, you must add it in the last. */
-  public enum PhysicalPlanType {
-    INSERT,
-    DELETE,
-    BATCHINSERT,
-    SET_STORAGE_GROUP,
-    CREATE_TIMESERIES,
-    TTL,
-    GRANT_WATERMARK_EMBEDDING,
-    REVOKE_WATERMARK_EMBEDDING,
-    CREATE_ROLE,
-    DELETE_ROLE,
-    CREATE_USER,
-    REVOKE_USER_ROLE,
-    REVOKE_ROLE_PRIVILEGE,
-    REVOKE_USER_PRIVILEGE,
-    GRANT_ROLE_PRIVILEGE,
-    GRANT_USER_PRIVILEGE,
-    GRANT_USER_ROLE,
-    MODIFY_PASSWORD,
-    DELETE_USER,
-    DELETE_STORAGE_GROUP,
-    SHOW_TIMESERIES,
-    DELETE_TIMESERIES,
-    LOAD_CONFIGURATION,
-    CREATE_MULTI_TIMESERIES,
-    ALTER_TIMESERIES,
-    FLUSH,
-    CREATE_INDEX,
-    DROP_INDEX,
-    CHANGE_TAG_OFFSET,
-    CHANGE_ALIAS,
-    MNODE,
-    MEASUREMENT_MNODE,
-    STORAGE_GROUP_MNODE,
-    BATCH_INSERT_ONE_DEVICE,
-    MULTI_BATCH_INSERT,
-    BATCH_INSERT_ROWS,
-    SHOW_DEVICES,
-    CREATE_TEMPLATE,
-    SET_TEMPLATE,
-    ACTIVATE_TEMPLATE,
-    AUTO_CREATE_DEVICE_MNODE,
-    CREATE_ALIGNED_TIMESERIES,
-    CLUSTER_LOG,
-    CREATE_TRIGGER,
-    DROP_TRIGGER,
-    START_TRIGGER,
-    STOP_TRIGGER,
-    CREATE_CONTINUOUS_QUERY,
-    DROP_CONTINUOUS_QUERY,
-    SHOW_CONTINUOUS_QUERIES,
-    MERGE,
-    CREATE_SNAPSHOT, // the snapshot feature has been deprecated, this is kept for compatibility
-    CLEARCACHE,
-    CREATE_FUNCTION,
-    DROP_FUNCTION,
-    SELECT_INTO,
-    SET_SYSTEM_MODE,
-    UNSET_TEMPLATE,
-    APPEND_TEMPLATE,
-    PRUNE_TEMPLATE,
-    START_PIPE_SERVER,
-    STOP_PIPE_SERVER,
-    DROP_TEMPLATE,
-    ACTIVATE_TEMPLATE_IN_CLUSTER,
-    PRE_DELETE_TIMESERIES_IN_CLUSTER,
-    ROLLBACK_PRE_DELETE_TIMESERIES
-  }
-
-  public long getIndex() {
-    return index;
-  }
-
-  public void setIndex(long index) {
-    this.index = index;
-  }
-
-  /**
-   * Check the integrity of the plan in case that the plan is generated by a careless user through
-   * Session API.
-   *
-   * @throws QueryProcessException when the check fails
-   */
-  // TODO(INSERT) move this check into analyze
-  public void checkIntegrity() throws QueryProcessException {}
-
-  public boolean isPrefixMatch() {
-    return isPrefixMatch;
-  }
-
-  public void setPrefixMatch(boolean prefixMatch) {
-    isPrefixMatch = prefixMatch;
-  }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java
deleted file mode 100644
index 256c2e757e..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.iotdb.db.qp.physical.sys;
-
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateAlignedTimeSeriesPlan;
-import org.apache.iotdb.db.qp.logical.Operator;
-import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-public class CreateAlignedTimeSeriesPlan extends PhysicalPlan
-    implements ICreateAlignedTimeSeriesPlan {
-
-  private static final Logger logger = LoggerFactory.getLogger(CreateAlignedTimeSeriesPlan.class);
-  private static final int PLAN_SINCE_0_14 = -1;
-
-  private PartialPath devicePath;
-  private List<String> measurements;
-  private List<TSDataType> dataTypes;
-  private List<TSEncoding> encodings;
-  private List<CompressionType> compressors;
-  private List<String> aliasList;
-  private List<Map<String, String>> tagsList;
-  private List<Map<String, String>> attributesList;
-  private List<Long> tagOffsets = null;
-
-  public CreateAlignedTimeSeriesPlan() {
-    super(Operator.OperatorType.CREATE_ALIGNED_TIMESERIES);
-    canBeSplit = false;
-  }
-
-  public CreateAlignedTimeSeriesPlan(
-      PartialPath devicePath,
-      List<String> measurements,
-      List<TSDataType> dataTypes,
-      List<TSEncoding> encodings,
-      List<CompressionType> compressors,
-      List<String> aliasList,
-      List<Map<String, String>> tagsList,
-      List<Map<String, String>> attributesList) {
-    super(Operator.OperatorType.CREATE_ALIGNED_TIMESERIES);
-    this.devicePath = devicePath;
-    this.measurements = measurements;
-    this.dataTypes = dataTypes;
-    this.encodings = encodings;
-    this.compressors = compressors;
-    this.aliasList = aliasList;
-    this.tagsList = tagsList;
-    this.attributesList = attributesList;
-    this.canBeSplit = false;
-  }
-
-  public CreateAlignedTimeSeriesPlan(
-      PartialPath devicePath, String measurement, MeasurementSchema schema) {
-    super(Operator.OperatorType.CREATE_ALIGNED_TIMESERIES);
-    this.devicePath = devicePath;
-    this.measurements = Collections.singletonList(measurement);
-    this.dataTypes = Collections.singletonList(schema.getType());
-    this.encodings = Collections.singletonList(schema.getEncodingType());
-    this.compressors = Collections.singletonList(schema.getCompressor());
-    this.canBeSplit = false;
-  }
-
-  public PartialPath getDevicePath() {
-    return devicePath;
-  }
-
-  public void setDevicePath(PartialPath devicePath) {
-    this.devicePath = devicePath;
-  }
-
-  public List<String> getMeasurements() {
-    return measurements;
-  }
-
-  public void setMeasurements(List<String> measurements) {
-    this.measurements = measurements;
-  }
-
-  public List<TSDataType> getDataTypes() {
-    return dataTypes;
-  }
-
-  public void setDataTypes(List<TSDataType> dataTypes) {
-    this.dataTypes = dataTypes;
-  }
-
-  public List<TSEncoding> getEncodings() {
-    return encodings;
-  }
-
-  public void setEncodings(List<TSEncoding> encodings) {
-    this.encodings = encodings;
-  }
-
-  public List<CompressionType> getCompressors() {
-    return compressors;
-  }
-
-  public void setCompressors(List<CompressionType> compressors) {
-    this.compressors = compressors;
-  }
-
-  public List<String> getAliasList() {
-    return aliasList;
-  }
-
-  public void setAliasList(List<String> aliasList) {
-    this.aliasList = aliasList;
-  }
-
-  public List<Map<String, String>> getTagsList() {
-    return tagsList;
-  }
-
-  public void setTagsList(List<Map<String, String>> tagsList) {
-    this.tagsList = tagsList;
-  }
-
-  public List<Map<String, String>> getAttributesList() {
-    return attributesList;
-  }
-
-  public void setAttributesList(List<Map<String, String>> attributesList) {
-    this.attributesList = attributesList;
-  }
-
-  public List<Long> getTagOffsets() {
-    if (tagOffsets == null) {
-      tagOffsets = new ArrayList<>();
-      for (int i = 0; i < measurements.size(); i++) {
-        tagOffsets.add(Long.parseLong("-1"));
-      }
-    }
-    return tagOffsets;
-  }
-
-  public void setTagOffsets(List<Long> tagOffsets) {
-    this.tagOffsets = tagOffsets;
-  }
-
-  @Override
-  public String toString() {
-    return String.format(
-        "devicePath: %s, measurements: %s, dataTypes: %s, encodings: %s, compressions: %s, tagOffsets: %s",
-        devicePath, measurements, dataTypes, encodings, compressors, tagOffsets);
-  }
-
-  @Override
-  public List<PartialPath> getPaths() {
-    List<PartialPath> paths = new ArrayList<>();
-    for (String measurement : measurements) {
-      try {
-        paths.add(new PartialPath(devicePath.getFullPath(), measurement));
-      } catch (IllegalPathException e) {
-        logger.error("Failed to get paths of CreateAlignedTimeSeriesPlan. ", e);
-      }
-    }
-    return paths;
-  }
-
-  @Override
-  public void serialize(DataOutputStream stream) throws IOException {
-    stream.writeByte((byte) PhysicalPlanType.CREATE_ALIGNED_TIMESERIES.ordinal());
-
-    // distinguish the plan from that of old versions
-    stream.writeInt(PLAN_SINCE_0_14);
-
-    byte[] bytes = devicePath.getFullPath().getBytes();
-    stream.writeInt(bytes.length);
-    stream.write(bytes);
-
-    ReadWriteIOUtils.write(measurements.size(), stream);
-    for (String measurement : measurements) {
-      ReadWriteIOUtils.write(measurement, stream);
-    }
-    for (TSDataType dataType : dataTypes) {
-      stream.write(dataType.ordinal());
-    }
-    for (TSEncoding encoding : encodings) {
-      stream.write(encoding.ordinal());
-    }
-    for (CompressionType compressor : compressors) {
-      stream.write(compressor.serialize());
-    }
-    if (tagOffsets == null) {
-      tagOffsets = new ArrayList<>();
-      for (int i = 0; i < measurements.size(); i++) {
-        tagOffsets.add(Long.parseLong("-1"));
-      }
-    }
-    for (Long tagOffset : tagOffsets) {
-      stream.writeLong(tagOffset);
-    }
-
-    // alias
-    if (aliasList != null && !aliasList.isEmpty()) {
-      stream.write(1);
-      for (String alias : aliasList) {
-        ReadWriteIOUtils.write(alias, stream);
-      }
-    } else {
-      stream.write(0);
-    }
-
-    // tags
-    if (tagsList != null && !tagsList.isEmpty()) {
-      stream.write(1);
-      for (Map<String, String> tags : tagsList) {
-        ReadWriteIOUtils.write(tags, stream);
-      }
-    } else {
-      stream.write(0);
-    }
-
-    // attributes
-    if (attributesList != null && !attributesList.isEmpty()) {
-      stream.write(1);
-      for (Map<String, String> attributes : attributesList) {
-        ReadWriteIOUtils.write(attributes, stream);
-      }
-    } else {
-      stream.write(0);
-    }
-
-    stream.writeLong(index);
-  }
-
-  @Override
-  public void serializeImpl(ByteBuffer buffer) {
-    buffer.put((byte) PhysicalPlanType.CREATE_ALIGNED_TIMESERIES.ordinal());
-
-    // distinguish the plan from that of old versions
-    buffer.putInt(PLAN_SINCE_0_14);
-
-    byte[] bytes = devicePath.getFullPath().getBytes();
-    buffer.putInt(bytes.length);
-    buffer.put(bytes);
-
-    ReadWriteIOUtils.write(measurements.size(), buffer);
-    for (String measurement : measurements) {
-      ReadWriteIOUtils.write(measurement, buffer);
-    }
-    for (TSDataType dataType : dataTypes) {
-      buffer.put((byte) dataType.ordinal());
-    }
-    for (TSEncoding encoding : encodings) {
-      buffer.put((byte) encoding.ordinal());
-    }
-    for (CompressionType compressor : compressors) {
-      buffer.put(compressor.serialize());
-    }
-    for (Long tagOffset : getTagOffsets()) {
-      buffer.putLong(tagOffset);
-    }
-
-    // alias
-    if (aliasList != null && !aliasList.isEmpty()) {
-      buffer.put((byte) 1);
-      for (String alias : aliasList) {
-        ReadWriteIOUtils.write(alias, buffer);
-      }
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    // tags
-    if (tagsList != null && !tagsList.isEmpty()) {
-      buffer.put((byte) 1);
-      for (Map<String, String> tags : tagsList) {
-        ReadWriteIOUtils.write(tags, buffer);
-      }
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    // attributes
-    if (attributesList != null && !attributesList.isEmpty()) {
-      buffer.put((byte) 1);
-      for (Map<String, String> attributes : attributesList) {
-        ReadWriteIOUtils.write(attributes, buffer);
-      }
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    buffer.putLong(index);
-  }
-
-  public void formerSerialize(ByteBuffer buffer) {
-    buffer.put((byte) PhysicalPlanType.CREATE_ALIGNED_TIMESERIES.ordinal());
-
-    byte[] bytes = devicePath.getFullPath().getBytes();
-    buffer.putInt(bytes.length);
-    buffer.put(bytes);
-
-    ReadWriteIOUtils.write(measurements.size(), buffer);
-    for (String measurement : measurements) {
-      ReadWriteIOUtils.write(measurement, buffer);
-    }
-    for (TSDataType dataType : dataTypes) {
-      buffer.put((byte) dataType.ordinal());
-    }
-    for (TSEncoding encoding : encodings) {
-      buffer.put((byte) encoding.ordinal());
-    }
-    for (CompressionType compressor : compressors) {
-      buffer.put(compressor.serialize());
-    }
-
-    // alias
-    if (aliasList != null && !aliasList.isEmpty()) {
-      buffer.put((byte) 1);
-      for (String alias : aliasList) {
-        ReadWriteIOUtils.write(alias, buffer);
-      }
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    buffer.putLong(index);
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    CreateAlignedTimeSeriesPlan that = (CreateAlignedTimeSeriesPlan) o;
-
-    return Objects.equals(devicePath, that.devicePath)
-        && Objects.equals(measurements, that.measurements)
-        && Objects.equals(dataTypes, that.dataTypes)
-        && Objects.equals(encodings, that.encodings)
-        && Objects.equals(compressors, that.compressors)
-        && Objects.equals(tagOffsets, that.tagOffsets);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(devicePath, measurements, dataTypes, encodings, compressors, tagOffsets);
-  }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
deleted file mode 100644
index 1ceb486892..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.qp.physical.sys;
-
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPlan;
-import org.apache.iotdb.db.qp.logical.Operator;
-import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.TreeMap;
-
-public class CreateTimeSeriesPlan extends PhysicalPlan implements ICreateTimeSeriesPlan {
-
-  private PartialPath path;
-  private TSDataType dataType;
-  private TSEncoding encoding;
-  private CompressionType compressor;
-  private String alias;
-  private Map<String, String> props = null;
-  private Map<String, String> tags = null;
-  private Map<String, String> attributes = null;
-  private long tagOffset = -1;
-
-  public CreateTimeSeriesPlan() {
-    super(Operator.OperatorType.CREATE_TIMESERIES);
-    canBeSplit = false;
-  }
-
-  public CreateTimeSeriesPlan(
-      PartialPath path,
-      TSDataType dataType,
-      TSEncoding encoding,
-      CompressionType compressor,
-      Map<String, String> props,
-      Map<String, String> tags,
-      Map<String, String> attributes,
-      String alias) {
-    super(Operator.OperatorType.CREATE_TIMESERIES);
-    this.path = path;
-    this.dataType = dataType;
-    this.encoding = encoding;
-    this.compressor = compressor;
-    this.tags = tags;
-    this.attributes = attributes;
-    this.alias = alias;
-    canBeSplit = false;
-    if (props != null) {
-      this.props = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-      this.props.putAll(props);
-    }
-  }
-
-  public CreateTimeSeriesPlan(PartialPath path, MeasurementSchema schema) {
-    super(Operator.OperatorType.CREATE_TIMESERIES);
-    this.path = path;
-    this.dataType = schema.getType();
-    this.encoding = schema.getEncodingType();
-    this.compressor = schema.getCompressor();
-    canBeSplit = false;
-  }
-
-  public PartialPath getPath() {
-    return path;
-  }
-
-  public void setPath(PartialPath path) {
-    this.path = path;
-  }
-
-  public TSDataType getDataType() {
-    return dataType;
-  }
-
-  public void setDataType(TSDataType dataType) {
-    this.dataType = dataType;
-  }
-
-  public CompressionType getCompressor() {
-    return compressor;
-  }
-
-  public void setCompressor(CompressionType compressor) {
-    this.compressor = compressor;
-  }
-
-  public TSEncoding getEncoding() {
-    return encoding;
-  }
-
-  public void setEncoding(TSEncoding encoding) {
-    this.encoding = encoding;
-  }
-
-  public Map<String, String> getAttributes() {
-    return attributes;
-  }
-
-  public void setAttributes(Map<String, String> attributes) {
-    this.attributes = attributes;
-  }
-
-  public String getAlias() {
-    return alias;
-  }
-
-  public void setAlias(String alias) {
-    this.alias = alias;
-  }
-
-  public Map<String, String> getTags() {
-    return tags;
-  }
-
-  public void setTags(Map<String, String> tags) {
-    this.tags = tags;
-  }
-
-  public Map<String, String> getProps() {
-    return props;
-  }
-
-  public void setProps(Map<String, String> props) {
-    this.props = props;
-  }
-
-  public long getTagOffset() {
-    return tagOffset;
-  }
-
-  public void setTagOffset(long tagOffset) {
-    this.tagOffset = tagOffset;
-  }
-
-  @Override
-  public String toString() {
-    return String.format(
-        "seriesPath: %s, resultDataType: %s, encoding: %s, compression: %s, tagOffset: %s",
-        path, dataType, encoding, compressor, tagOffset);
-  }
-
-  @Override
-  public List<PartialPath> getPaths() {
-    return Collections.singletonList(path);
-  }
-
-  @Override
-  public void serialize(DataOutputStream stream) throws IOException {
-    stream.writeByte((byte) PhysicalPlanType.CREATE_TIMESERIES.ordinal());
-    byte[] bytes = path.getFullPath().getBytes();
-    stream.writeInt(bytes.length);
-    stream.write(bytes);
-    stream.write(dataType.ordinal());
-    stream.write(encoding.ordinal());
-    stream.write(compressor.serialize());
-    stream.writeLong(tagOffset);
-
-    // alias
-    if (alias != null) {
-      stream.write(1);
-      ReadWriteIOUtils.write(alias, stream);
-    } else {
-      stream.write(0);
-    }
-
-    // props
-    if (props != null && !props.isEmpty()) {
-      stream.write(1);
-      ReadWriteIOUtils.write(props, stream);
-    } else {
-      stream.write(0);
-    }
-
-    // tags
-    if (tags != null && !tags.isEmpty()) {
-      stream.write(1);
-      ReadWriteIOUtils.write(tags, stream);
-    } else {
-      stream.write(0);
-    }
-
-    // attributes
-    if (attributes != null && !attributes.isEmpty()) {
-      stream.write(1);
-      ReadWriteIOUtils.write(attributes, stream);
-    } else {
-      stream.write(0);
-    }
-
-    stream.writeLong(index);
-  }
-
-  @Override
-  public void serializeImpl(ByteBuffer buffer) {
-    buffer.put((byte) PhysicalPlanType.CREATE_TIMESERIES.ordinal());
-    byte[] bytes = path.getFullPath().getBytes();
-    buffer.putInt(bytes.length);
-    buffer.put(bytes);
-    buffer.put((byte) dataType.ordinal());
-    buffer.put((byte) encoding.ordinal());
-    buffer.put(compressor.serialize());
-    buffer.putLong(tagOffset);
-
-    // alias
-    if (alias != null) {
-      buffer.put((byte) 1);
-      ReadWriteIOUtils.write(alias, buffer);
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    // props
-    if (props != null && !props.isEmpty()) {
-      buffer.put((byte) 1);
-      ReadWriteIOUtils.write(props, buffer);
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    // tags
-    if (tags != null && !tags.isEmpty()) {
-      buffer.put((byte) 1);
-      ReadWriteIOUtils.write(tags, buffer);
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    // attributes
-    if (attributes != null && !attributes.isEmpty()) {
-      buffer.put((byte) 1);
-      ReadWriteIOUtils.write(attributes, buffer);
-    } else {
-      buffer.put((byte) 0);
-    }
-
-    buffer.putLong(index);
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    CreateTimeSeriesPlan that = (CreateTimeSeriesPlan) o;
-
-    return Objects.equals(path, that.path)
-        && dataType == that.dataType
-        && encoding == that.encoding
-        && compressor == that.compressor
-        && tagOffset == that.tagOffset;
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(path, dataType, encoding, compressor, tagOffset);
-  }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
deleted file mode 100644
index 86f3e95112..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.iotdb.db.qp.physical.sys;
-
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
-import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-
-import java.util.Collections;
-import java.util.List;
-
-public class ShowPlan extends PhysicalPlan {
-
-  private ShowContentType showContentType;
-  protected int limit = 0;
-  protected int offset = 0;
-  protected PartialPath path;
-  private boolean hasLimit;
-
-  public ShowPlan(ShowContentType showContentType) {
-    super(OperatorType.SHOW);
-    setQuery(true);
-    this.showContentType = showContentType;
-  }
-
-  public ShowPlan(ShowContentType showContentType, PartialPath path) {
-    this(showContentType);
-    this.path = path;
-  }
-
-  public ShowPlan(ShowContentType showContentType, PartialPath path, int limit, int offset) {
-    this(showContentType, path);
-    this.limit = limit;
-    this.offset = offset;
-    if (limit == 0) {
-      this.hasLimit = false;
-    } else {
-      this.hasLimit = true;
-    }
-  }
-
-  @Override
-  public List<PartialPath> getPaths() {
-    return Collections.emptyList();
-  }
-
-  public ShowContentType getShowContentType() {
-    return showContentType;
-  }
-
-  public PartialPath getPath() {
-    return this.path;
-  }
-
-  public int getLimit() {
-    return limit;
-  }
-
-  public void setLimit(int limit) {
-    this.limit = limit;
-  }
-
-  public int getOffset() {
-    return offset;
-  }
-
-  public void setOffset(int offset) {
-    this.offset = offset;
-  }
-
-  public boolean hasLimit() {
-    return hasLimit;
-  }
-
-  public void setHasLimit(boolean hasLimit) {
-    this.hasLimit = hasLimit;
-  }
-
-  @Override
-  public String toString() {
-    return String.format("%s %s", getOperatorType(), showContentType);
-  }
-
-  @Override
-  public String getOperatorName() {
-    return String.format("%s: %s", getOperatorType(), showContentType);
-  }
-
-  public enum ShowContentType {
-    FLUSH_TASK_INFO,
-    TTL,
-    VERSION,
-    TIMESERIES,
-    STORAGE_GROUP,
-    CHILD_PATH,
-    CHILD_NODE,
-    DEVICES,
-    COUNT_TIMESERIES,
-    COUNT_NODE_TIMESERIES,
-    COUNT_NODES,
-    FUNCTIONS,
-    COUNT_DEVICES,
-    COUNT_STORAGE_GROUP,
-    QUERY_PROCESSLIST,
-    TRIGGERS,
-    LOCK_INFO,
-    CONTINUOUS_QUERY,
-    QUERY_RESOURCE,
-    SCHEMA_TEMPLATE,
-    NODES_IN_SCHEMA_TEMPLATE,
-    PATHS_SET_SCHEMA_TEMPLATE,
-    PATHS_USING_SCHEMA_TEMPLATE,
-  }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTimeSeriesPlan.java
deleted file mode 100644
index 7951d60724..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowTimeSeriesPlan.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.qp.physical.sys;
-
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.template.Template;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Objects;
-
-public class ShowTimeSeriesPlan extends ShowPlan {
-
-  private boolean isContains;
-  private String key;
-  private String value;
-
-  // if is true, the result will be sorted according to the inserting frequency of the timeseries
-  private boolean orderByHeat;
-
-  private Map<Integer, Template> relatedTemplate;
-
-  public ShowTimeSeriesPlan(PartialPath path) {
-    super(ShowContentType.TIMESERIES, path);
-  }
-
-  public ShowTimeSeriesPlan(
-      PartialPath path,
-      boolean isContains,
-      String key,
-      String value,
-      int limit,
-      int offset,
-      boolean orderByHeat) {
-    super(ShowContentType.TIMESERIES);
-    this.path = path;
-    this.isContains = isContains;
-    this.key = key;
-    this.value = value;
-    this.limit = limit;
-    this.offset = offset;
-    this.orderByHeat = orderByHeat;
-  }
-
-  public ShowTimeSeriesPlan(PartialPath path, int limit, int offset) {
-    super(ShowContentType.TIMESERIES, path, limit, offset);
-  }
-
-  public ShowTimeSeriesPlan() {
-    super(ShowContentType.TIMESERIES);
-  }
-
-  public boolean isContains() {
-    return isContains;
-  }
-
-  public void setIsContains(boolean isContains) {
-    this.isContains = isContains;
-  }
-
-  public String getKey() {
-    return key;
-  }
-
-  public void setKey(String key) {
-    this.key = key;
-  }
-
-  public String getValue() {
-    return value;
-  }
-
-  public void setValue(String value) {
-    this.value = value;
-  }
-
-  public boolean isOrderByHeat() {
-    return orderByHeat;
-  }
-
-  public void setOrderByHeat(boolean orderByHeat) {
-    this.orderByHeat = orderByHeat;
-  }
-
-  public Map<Integer, Template> getRelatedTemplate() {
-    return relatedTemplate;
-  }
-
-  public void setRelatedTemplate(Map<Integer, Template> relatedTemplate) {
-    this.relatedTemplate = relatedTemplate;
-  }
-
-  @Override
-  public void serialize(DataOutputStream outputStream) throws IOException {
-    outputStream.write(PhysicalPlanType.SHOW_TIMESERIES.ordinal());
-    putString(outputStream, path.getFullPath());
-    outputStream.writeBoolean(isContains);
-    putString(outputStream, key);
-    putString(outputStream, value);
-    outputStream.writeInt(limit);
-    outputStream.writeInt(offset);
-    outputStream.writeBoolean(orderByHeat);
-    outputStream.writeLong(index);
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    ShowTimeSeriesPlan that = (ShowTimeSeriesPlan) o;
-    return isContains == that.isContains
-        && orderByHeat == that.orderByHeat
-        && Objects.equals(key, that.key)
-        && Objects.equals(value, that.value)
-        && Objects.equals(relatedTemplate, that.relatedTemplate);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(isContains, key, value, orderByHeat, relatedTemplate);
-  }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
deleted file mode 100644
index f34c8d93e7..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResult.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.dataset;
-
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-
-public class ShowTimeSeriesResult extends ShowResult {
-
-  private String alias;
-  private TSDataType dataType;
-  private TSEncoding encoding;
-  private CompressionType compressor;
-  private Map<String, String> tags;
-  private Map<String, String> attributes;
-  private long lastTime;
-
-  private String deadband;
-  private String deadbandParameters;
-
-  public ShowTimeSeriesResult(
-      String name,
-      String alias,
-      String sgName,
-      TSDataType dataType,
-      TSEncoding encoding,
-      CompressionType compressor,
-      long lastTime,
-      Map<String, String> tags,
-      Map<String, String> attributes,
-      String deadband,
-      String deadbandParameters) {
-    super(name, sgName);
-    this.alias = alias;
-    this.dataType = dataType;
-    this.encoding = encoding;
-    this.compressor = compressor;
-    this.tags = tags;
-    this.attributes = attributes;
-    this.lastTime = lastTime;
-    this.deadband = deadband;
-    this.deadbandParameters = deadbandParameters;
-  }
-
-  public ShowTimeSeriesResult() {
-    super();
-  }
-
-  public String getAlias() {
-    return alias;
-  }
-
-  public TSDataType getDataType() {
-    return dataType;
-  }
-
-  public TSEncoding getEncoding() {
-    return encoding;
-  }
-
-  public CompressionType getCompressor() {
-    return compressor;
-  }
-
-  public Map<String, String> getTag() {
-    return tags;
-  }
-
-  public Map<String, String> getAttribute() {
-    return attributes;
-  }
-
-  public long getLastTime() {
-    return lastTime;
-  }
-
-  public String getDeadband() {
-    return deadband;
-  }
-
-  public String getDeadbandParameters() {
-    return deadbandParameters;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ShowTimeSeriesResult result = (ShowTimeSeriesResult) o;
-    return Objects.equals(name, result.name);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(name);
-  }
-
-  private void writeNullable(Map<String, String> param, OutputStream outputStream)
-      throws IOException {
-    ReadWriteIOUtils.write(param != null, outputStream);
-    if (param != null) {
-      ReadWriteIOUtils.write(param.size(), outputStream);
-      for (Entry<String, String> entry : param.entrySet()) {
-        ReadWriteIOUtils.write(entry.getKey(), outputStream);
-        ReadWriteIOUtils.write(entry.getValue(), outputStream);
-      }
-    }
-  }
-
-  public void serialize(OutputStream outputStream) throws IOException {
-    ReadWriteIOUtils.write(name, outputStream);
-    ReadWriteIOUtils.write(alias != null, outputStream); // flag
-    if (alias != null) {
-      ReadWriteIOUtils.write(alias, outputStream);
-    }
-    ReadWriteIOUtils.write(sgName, outputStream);
-    ReadWriteIOUtils.write(dataType, outputStream);
-    ReadWriteIOUtils.write(encoding, outputStream);
-    ReadWriteIOUtils.write(compressor, outputStream);
-
-    // write last time
-    ReadWriteIOUtils.write(lastTime, outputStream);
-
-    // flag for tags and attributes
-    writeNullable(tags, outputStream);
-    writeNullable(attributes, outputStream);
-  }
-
-  public static ShowTimeSeriesResult deserialize(ByteBuffer buffer) {
-    ShowTimeSeriesResult result = new ShowTimeSeriesResult();
-    result.name = ReadWriteIOUtils.readString(buffer);
-    if (buffer.get() == 1) { // flag
-      result.alias = ReadWriteIOUtils.readString(buffer);
-    }
-    result.sgName = ReadWriteIOUtils.readString(buffer);
-    result.dataType = ReadWriteIOUtils.readDataType(buffer);
-    result.encoding = ReadWriteIOUtils.readEncoding(buffer);
-    result.compressor = ReadWriteIOUtils.readCompressionType(buffer);
-
-    // read last time
-    result.lastTime = ReadWriteIOUtils.readLong(buffer);
-
-    // flag for tag
-    if (buffer.get() == 1) {
-      int tagSize = buffer.getInt();
-      result.tags = new HashMap<>(tagSize);
-      for (int i = 0; i < tagSize; i++) {
-        String key = ReadWriteIOUtils.readString(buffer);
-        String value = ReadWriteIOUtils.readString(buffer);
-        result.tags.put(key, value);
-      }
-    }
-
-    // flag for attribute
-    if (buffer.get() == 1) {
-      int attributeSize = buffer.getInt();
-      result.attributes = new HashMap<>(attributeSize);
-      for (int i = 0; i < attributeSize; i++) {
-        String key = ReadWriteIOUtils.readString(buffer);
-        String value = ReadWriteIOUtils.readString(buffer);
-        result.attributes.put(key, value);
-      }
-    }
-    return result;
-  }
-}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
index 9ce130114d..3531345015 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionAliasAndTagTest.java
@@ -21,9 +21,9 @@ package org.apache.iotdb.db.metadata.schemaRegion;
 
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -147,10 +147,9 @@ public class SchemaRegionAliasAndTagTest extends AbstractSchemaRegionTest {
     try {
       Pair<List<ShowTimeSeriesResult>, Integer> result =
           schemaRegion.showTimeseries(
-              new ShowTimeSeriesPlan(new PartialPath(fullPath), false, null, null, 0, 0, false),
-              null);
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new PartialPath(fullPath)));
       Assert.assertEquals(1, result.left.size());
-      Assert.assertEquals(fullPath, result.left.get(0).getName());
+      Assert.assertEquals(fullPath, result.left.get(0).getPath());
       Assert.assertEquals(alias, result.left.get(0).getAlias());
       Assert.assertEquals(tags, result.left.get(0).getTag());
       Assert.assertEquals(attributes, result.left.get(0).getAttribute());
@@ -164,10 +163,9 @@ public class SchemaRegionAliasAndTagTest extends AbstractSchemaRegionTest {
     try {
       Pair<List<ShowTimeSeriesResult>, Integer> result =
           schemaRegion.showTimeseries(
-              new ShowTimeSeriesPlan(new PartialPath(fullPath), false, null, null, 0, 0, false),
-              null);
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new PartialPath(fullPath)));
       Assert.assertEquals(1, result.left.size());
-      Assert.assertEquals(fullPath, result.left.get(0).getName());
+      Assert.assertEquals(fullPath, result.left.get(0).getPath());
       Assert.assertEquals(attributes, result.left.get(0).getAttribute());
     } catch (Exception e) {
       e.printStackTrace();
@@ -179,10 +177,9 @@ public class SchemaRegionAliasAndTagTest extends AbstractSchemaRegionTest {
     try {
       Pair<List<ShowTimeSeriesResult>, Integer> result =
           schemaRegion.showTimeseries(
-              new ShowTimeSeriesPlan(new PartialPath(fullPath), false, null, null, 0, 0, false),
-              null);
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new PartialPath(fullPath)));
       Assert.assertEquals(1, result.left.size());
-      Assert.assertEquals(fullPath, result.left.get(0).getName());
+      Assert.assertEquals(fullPath, result.left.get(0).getPath());
       Assert.assertEquals(tags, result.left.get(0).getTag());
     } catch (Exception e) {
       logger.error(e.getMessage(), e);
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
index c43e55027c..f14e27ad9b 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
@@ -27,13 +27,11 @@ import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException;
 import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException;
 import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
 import org.apache.iotdb.db.metadata.mnode.MNodeType;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.CreateAlignedTimeSeriesPlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.CreateTimeSeriesPlanImpl;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -69,7 +67,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
 
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -80,7 +78,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.temperature"),
             TSDataType.FLOAT,
             TSEncoding.RLE,
@@ -143,7 +141,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
   public void testCreateAlignedTimeseries() throws Exception {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
     schemaRegion.createAlignedTimeSeries(
-        new CreateAlignedTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath("root.sg.wf02.wt01"),
             Arrays.asList("temperature", "status"),
             Arrays.asList(TSDataType.valueOf("FLOAT"), TSDataType.valueOf("INT32")),
@@ -164,7 +162,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
   public void testCheckMeasurementExistence() throws Exception {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -175,7 +173,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.v1.s1"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -186,7 +184,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.temperature"),
             TSDataType.FLOAT,
             TSEncoding.RLE,
@@ -240,7 +238,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
   public void testDeleteTimeseries() throws Exception {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -251,7 +249,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt02.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -262,7 +260,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.temperature"),
             TSDataType.FLOAT,
             TSEncoding.RLE,
@@ -273,7 +271,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             null),
         -1);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf02.wt01.temperature"),
             TSDataType.FLOAT,
             TSEncoding.RLE,
@@ -620,19 +618,24 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
 
     Assert.assertEquals(
         new Pair<>(Arrays.asList(), 0),
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.laptop.d0"))));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.laptop.d0"))));
     Assert.assertEquals(
         new Pair<>(Arrays.asList(new ShowDevicesResult("root.laptop.d1", false)), 0),
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.laptop.d1"))));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.laptop.d1"))));
     Assert.assertEquals(
         new Pair<>(Arrays.asList(new ShowDevicesResult("root.laptop.d2", false)), 0),
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.laptop.d2"))));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.laptop.d2"))));
     Assert.assertEquals(
         new Pair<>(Arrays.asList(new ShowDevicesResult("root.laptop", false)), 0),
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.laptop"))));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.laptop"))));
     Assert.assertEquals(
         new Pair<>(Arrays.asList(new ShowDevicesResult("root.laptop", false)), 0),
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.*"))));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.*"))));
 
     List<ShowDevicesResult> expectedList =
         Arrays.asList(
@@ -642,7 +645,8 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             new ShowDevicesResult("root.laptop.d1.s2", false));
     Integer expectedOffset = 0;
     Pair<List<ShowDevicesResult>, Integer> actualResult =
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.**")));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.**")));
     // Compare hash sets because the order does not matter.
     HashSet<ShowDevicesResult> expectedHashset = new HashSet<>(expectedList);
     HashSet<ShowDevicesResult> actualHashset = new HashSet<>(actualResult.left);
@@ -655,7 +659,8 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
             new ShowDevicesResult("root.laptop.d2", false));
     expectedOffset = 0;
     actualResult =
-        schemaRegion.getMatchedDevices(new ShowDevicesPlan(new PartialPath("root.**.d*")));
+        schemaRegion.getMatchedDevices(
+            SchemaRegionReadPlanFactory.getShowDevicesPlan(new PartialPath("root.**.d*")));
     // Compare hash sets because the order does not matter.
     expectedHashset = new HashSet<>(expectedList);
     actualHashset = new HashSet<>(actualResult.left);
@@ -680,8 +685,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
     // case 01: all timeseries
     Pair<List<ShowTimeSeriesResult>, Integer> result =
         schemaRegion.showTimeseries(
-            new ShowTimeSeriesPlan(new PartialPath("root.**"), false, null, null, 0, 0, false),
-            null);
+            SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new PartialPath("root.**")));
     HashSet<String> expectedPathList =
         new HashSet<>(
             Arrays.asList(
@@ -695,15 +699,14 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
     Assert.assertEquals(expectedSize, result.left.size());
     HashSet<String> actualPathList = new HashSet<>();
     for (int index = 0; index < expectedSize; index++) {
-      actualPathList.add(result.left.get(index).getName());
+      actualPathList.add(result.left.get(index).getPath());
     }
     Assert.assertEquals(expectedPathList, actualPathList);
 
     // case 02: some timeseries, pattern "root.**.s*"
     result =
         schemaRegion.showTimeseries(
-            new ShowTimeSeriesPlan(new PartialPath("root.**.s*"), false, null, null, 0, 0, false),
-            null);
+            SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(new PartialPath("root.**.s*")));
     expectedPathList =
         new HashSet<>(
             Arrays.asList(
@@ -715,7 +718,7 @@ public class SchemaRegionBasicTest extends AbstractSchemaRegionTest {
     Assert.assertEquals(expectedSize, result.left.size());
     actualPathList = new HashSet<>();
     for (int index = 0; index < expectedSize; index++) {
-      actualPathList.add(result.left.get(index).getName());
+      actualPathList.add(result.left.get(index).getPath());
     }
     Assert.assertEquals(expectedPathList, actualPathList);
   }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
index 39ca871818..0f50780a8a 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionManagementTest.java
@@ -26,12 +26,11 @@ import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.MetadataConstant;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.template.Template;
-import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -73,7 +72,7 @@ public class SchemaRegionManagementTest extends AbstractSchemaRegionTest {
       Map<String, String> tags = new HashMap<>();
       tags.put("tag-key", "tag-value");
       schemaRegion.createTimeseries(
-          new CreateTimeSeriesPlan(
+          SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
               new PartialPath("root.sg.d1.s1"),
               TSDataType.INT32,
               TSEncoding.PLAIN,
@@ -86,7 +85,7 @@ public class SchemaRegionManagementTest extends AbstractSchemaRegionTest {
 
       Template template = generateTemplate();
       schemaRegion.activateSchemaTemplate(
-          SchemaRegionPlanFactory.getActivateTemplateInClusterPlan(
+          SchemaRegionWritePlanFactory.getActivateTemplateInClusterPlan(
               new PartialPath("root.sg.d2"), 1, template.getId()),
           template);
 
@@ -98,12 +97,11 @@ public class SchemaRegionManagementTest extends AbstractSchemaRegionTest {
 
       Pair<List<ShowTimeSeriesResult>, Integer> result =
           schemaRegion.showTimeseries(
-              new ShowTimeSeriesPlan(
-                  new PartialPath("root.sg.**"), false, "tag-key", "tag-value", 0, 0, false),
-              null);
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
+                  new PartialPath("root.sg.**"), false, "tag-key", "tag-value"));
 
       ShowTimeSeriesResult seriesResult = result.left.get(0);
-      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), seriesResult.getName());
+      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), seriesResult.getPath());
       Map<String, String> resultTagMap = seriesResult.getTag();
       Assert.assertEquals(1, resultTagMap.size());
       Assert.assertEquals("tag-value", resultTagMap.get("tag-key"));
@@ -114,25 +112,25 @@ public class SchemaRegionManagementTest extends AbstractSchemaRegionTest {
       newSchemaRegion.loadSnapshot(snapshotDir);
       result =
           newSchemaRegion.showTimeseries(
-              new ShowTimeSeriesPlan(
-                  new PartialPath("root.sg.**"), false, "tag-key", "tag-value", 0, 0, false),
-              null);
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
+                  new PartialPath("root.sg.**"), false, "tag-key", "tag-value"));
 
       seriesResult = result.left.get(0);
-      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), seriesResult.getName());
+      Assert.assertEquals(new PartialPath("root.sg.d1.s1").getFullPath(), seriesResult.getPath());
       resultTagMap = seriesResult.getTag();
       Assert.assertEquals(1, resultTagMap.size());
       Assert.assertEquals("tag-value", resultTagMap.get("tag-key"));
 
-      ShowTimeSeriesPlan showTimeSeriesPlan =
-          new ShowTimeSeriesPlan(new PartialPath("root.sg.*.s1"), false, null, null, 0, 0, false);
-      showTimeSeriesPlan.setRelatedTemplate(Collections.singletonMap(template.getId(), template));
-      result = newSchemaRegion.showTimeseries(showTimeSeriesPlan, null);
+      result =
+          newSchemaRegion.showTimeseries(
+              SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(
+                  new PartialPath("root.sg.*.s1"),
+                  Collections.singletonMap(template.getId(), template)));
       result.left.sort(ShowTimeSeriesResult::compareTo);
       Assert.assertEquals(
-          new PartialPath("root.sg.d1.s1").getFullPath(), result.left.get(0).getName());
+          new PartialPath("root.sg.d1.s1").getFullPath(), result.left.get(0).getPath());
       Assert.assertEquals(
-          new PartialPath("root.sg.d2.s1").getFullPath(), result.left.get(1).getName());
+          new PartialPath("root.sg.d2.s1").getFullPath(), result.left.get(1).getPath());
 
     } finally {
       config.setSchemaRegionConsensusProtocolClass(schemaRegionConsensusProtocolClass);
@@ -166,7 +164,7 @@ public class SchemaRegionManagementTest extends AbstractSchemaRegionTest {
       for (int i = 0; i < 1000; i++) {
         for (int j = 0; j < 1000; j++) {
           schemaRegion.createTimeseries(
-              new CreateTimeSeriesPlan(
+              SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
                   new PartialPath("root.sg.d" + i + ".s" + j),
                   TSDataType.INT32,
                   TSEncoding.PLAIN,
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
index 05ce8ec1d1..41dfe60c50 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTemplateTest.java
@@ -21,11 +21,7 @@ package org.apache.iotdb.db.metadata.schemaRegion;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.ActivateTemplateInClusterPlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.CreateTimeSeriesPlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.DeactivateTemplatePlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.PreDeactivateTemplatePlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.RollbackPreDeactivateTemplatePlanImpl;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.metadata.template.Template;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -54,7 +50,7 @@ public class SchemaRegionTemplateTest extends AbstractSchemaRegionTest {
   public void testActivateSchemaTemplate() throws Exception {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -80,10 +76,12 @@ public class SchemaRegionTemplateTest extends AbstractSchemaRegionTest {
                 Collections.singletonList(CompressionType.SNAPPY)));
     template.setId(templateId);
     schemaRegion.activateSchemaTemplate(
-        new ActivateTemplateInClusterPlanImpl(new PartialPath("root.sg.wf01.wt01"), 3, templateId),
+        SchemaRegionWritePlanFactory.getActivateTemplateInClusterPlan(
+            new PartialPath("root.sg.wf01.wt01"), 3, templateId),
         template);
     schemaRegion.activateSchemaTemplate(
-        new ActivateTemplateInClusterPlanImpl(new PartialPath("root.sg.wf02"), 2, templateId),
+        SchemaRegionWritePlanFactory.getActivateTemplateInClusterPlan(
+            new PartialPath("root.sg.wf02"), 2, templateId),
         template);
     Set<String> expectedPaths = new HashSet<>(Arrays.asList("root.sg.wf01.wt01", "root.sg.wf02"));
     Set<String> pathsUsingTemplate =
@@ -118,7 +116,7 @@ public class SchemaRegionTemplateTest extends AbstractSchemaRegionTest {
   public void testDeactivateTemplate() throws Exception {
     ISchemaRegion schemaRegion = getSchemaRegion("root.sg", 0);
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath("root.sg.wf01.wt01.status"),
             TSDataType.BOOLEAN,
             TSEncoding.PLAIN,
@@ -144,27 +142,29 @@ public class SchemaRegionTemplateTest extends AbstractSchemaRegionTest {
                 Collections.singletonList(CompressionType.SNAPPY)));
     template.setId(templateId);
     schemaRegion.activateSchemaTemplate(
-        new ActivateTemplateInClusterPlanImpl(new PartialPath("root.sg.wf01.wt01"), 3, templateId),
+        SchemaRegionWritePlanFactory.getActivateTemplateInClusterPlan(
+            new PartialPath("root.sg.wf01.wt01"), 3, templateId),
         template);
     schemaRegion.activateSchemaTemplate(
-        new ActivateTemplateInClusterPlanImpl(new PartialPath("root.sg.wf02"), 2, templateId),
+        SchemaRegionWritePlanFactory.getActivateTemplateInClusterPlan(
+            new PartialPath("root.sg.wf02"), 2, templateId),
         template);
 
     // construct schema blacklist with template on root.sg.wf01.wt01 and root.sg.wf02
     Map<PartialPath, List<Integer>> allDeviceTemplateMap = new HashMap<>();
     allDeviceTemplateMap.put(new PartialPath("root.**"), Collections.singletonList(templateId));
     schemaRegion.constructSchemaBlackListWithTemplate(
-        new PreDeactivateTemplatePlanImpl(allDeviceTemplateMap));
+        SchemaRegionWritePlanFactory.getPreDeactivateTemplatePlan(allDeviceTemplateMap));
 
     // rollback schema blacklist with template on root.sg.wf02
     Map<PartialPath, List<Integer>> wf02TemplateMap = new HashMap<>();
     wf02TemplateMap.put(new PartialPath("root.sg.wf02"), Collections.singletonList(templateId));
     schemaRegion.rollbackSchemaBlackListWithTemplate(
-        new RollbackPreDeactivateTemplatePlanImpl(wf02TemplateMap));
+        SchemaRegionWritePlanFactory.getRollbackPreDeactivateTemplatePlan(wf02TemplateMap));
 
     // deactivate schema blacklist with template on root.sg.wf01.wt01
     schemaRegion.deactivateTemplateInBlackList(
-        new DeactivateTemplatePlanImpl(allDeviceTemplateMap));
+        SchemaRegionWritePlanFactory.getDeactivateTemplatePlan(allDeviceTemplateMap));
 
     // check using getPathsUsingTemplate
     List<String> expectedPaths = Collections.singletonList("root.sg.wf02");
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
index 89f60fda24..e794dfc184 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionTestUtil.java
@@ -20,8 +20,7 @@ package org.apache.iotdb.db.metadata.schemaRegion;
 
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.CreateAlignedTimeSeriesPlanImpl;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.CreateTimeSeriesPlanImpl;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -44,7 +43,7 @@ public class SchemaRegionTestUtil {
       String alias)
       throws MetadataException {
     schemaRegion.createTimeseries(
-        new CreateTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
             new PartialPath(fullPath),
             dataType,
             encoding,
@@ -69,7 +68,7 @@ public class SchemaRegionTestUtil {
       throws MetadataException {
     for (int i = 0; i < fullPaths.size(); i++) {
       schemaRegion.createTimeseries(
-          new CreateTimeSeriesPlanImpl(
+          SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
               new PartialPath(fullPaths.get(i)),
               dataTypes.get(i),
               encodings.get(i),
@@ -94,7 +93,7 @@ public class SchemaRegionTestUtil {
       List<String> alias)
       throws MetadataException {
     schemaRegion.createAlignedTimeSeries(
-        new CreateAlignedTimeSeriesPlanImpl(
+        SchemaRegionWritePlanFactory.getCreateAlignedTimeSeriesPlan(
             new PartialPath(devicePath),
             measurements,
             dataTypes,
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
index 2ceaa2c90f..ef64e274fa 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/schema/SchemaQueryScanOperatorTest.java
@@ -21,6 +21,9 @@ package org.apache.iotdb.db.mpp.execution.operator.schema;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.read.SchemaRegionReadPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowDevicesResult;
+import org.apache.iotdb.db.metadata.plan.schemaregion.result.ShowTimeSeriesResult;
 import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
 import org.apache.iotdb.db.mpp.common.FragmentInstanceId;
 import org.apache.iotdb.db.mpp.common.PlanFragmentId;
@@ -31,10 +34,6 @@ import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceContext;
 import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceStateMachine;
 import org.apache.iotdb.db.mpp.execution.operator.OperatorContext;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
-import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
-import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
-import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
-import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -82,7 +81,9 @@ public class SchemaQueryScanOperatorTest {
               1, planNodeId, SchemaQueryScanOperator.class.getSimpleName());
       PartialPath partialPath = new PartialPath(META_SCAN_OPERATOR_TEST_SG + ".device0");
       ISchemaRegion schemaRegion = Mockito.mock(ISchemaRegion.class);
-      Mockito.when(schemaRegion.getMatchedDevices(new ShowDevicesPlan(partialPath, 10, 0, true)))
+      Mockito.when(
+              schemaRegion.getMatchedDevices(
+                  SchemaRegionReadPlanFactory.getShowDevicesPlan(partialPath, 10, 0, true, false)))
           .thenReturn(
               new Pair<>(
                   Collections.singletonList(
@@ -157,8 +158,6 @@ public class SchemaQueryScanOperatorTest {
               1, planNodeId, SchemaQueryScanOperator.class.getSimpleName());
       PartialPath partialPath = new PartialPath(META_SCAN_OPERATOR_TEST_SG + ".device0.*");
 
-      ShowTimeSeriesPlan showTimeSeriesPlan =
-          new ShowTimeSeriesPlan(partialPath, false, null, null, 10, 0, false);
       List<ShowTimeSeriesResult> showTimeSeriesResults = new ArrayList<>();
       for (int i = 0; i < 10; i++) {
         showTimeSeriesResults.add(
@@ -169,7 +168,6 @@ public class SchemaQueryScanOperatorTest {
                 TSDataType.INT32,
                 TSEncoding.PLAIN,
                 CompressionType.UNCOMPRESSED,
-                0,
                 null,
                 null,
                 null,
@@ -177,10 +175,9 @@ public class SchemaQueryScanOperatorTest {
       }
 
       ISchemaRegion schemaRegion = Mockito.mock(ISchemaRegion.class);
-
-      showTimeSeriesPlan.setRelatedTemplate(Collections.emptyMap());
       Mockito.when(
-              schemaRegion.showTimeseries(showTimeSeriesPlan, operatorContext.getInstanceContext()))
+              schemaRegion.showTimeseries(
+                  SchemaRegionReadPlanFactory.getShowTimeSeriesPlan(partialPath, 10, 0)))
           .thenReturn(new Pair<>(showTimeSeriesResults, 0));
 
       operatorContext
diff --git a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowDevicesResultTest.java b/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowDevicesResultTest.java
deleted file mode 100644
index ad21bba968..0000000000
--- a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowDevicesResultTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.dataset;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-public class ShowDevicesResultTest {
-
-  @Test
-  public void serializeTest() throws IOException {
-    ShowDevicesResult showDevicesResult = new ShowDevicesResult("root.sg1.d1", false, "root.sg1");
-
-    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-    showDevicesResult.serialize(outputStream);
-    ByteBuffer byteBuffer = ByteBuffer.wrap(outputStream.toByteArray());
-    ShowDevicesResult result = ShowDevicesResult.deserialize(byteBuffer);
-
-    Assert.assertEquals("root.sg1.d1", result.getName());
-    Assert.assertFalse(result.isAligned());
-    Assert.assertEquals("root.sg1", result.getSgName());
-  }
-}
diff --git a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java b/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
deleted file mode 100644
index 235d199ee8..0000000000
--- a/server/src/test/java/org/apache/iotdb/db/query/dataset/ShowTimeSeriesResultTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.dataset;
-
-import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Collections;
-import java.util.Map;
-
-public class ShowTimeSeriesResultTest {
-
-  @Test
-  public void serializeTest() throws IOException {
-    Map<String, String> tag = Collections.singletonMap("tag1", "this is the first tag");
-    Map<String, String> attribute =
-        Collections.singletonMap("attribute1", "this is the first attribute");
-    ShowTimeSeriesResult showTimeSeriesResult =
-        new ShowTimeSeriesResult(
-            "root.sg1.d1.s1",
-            "temperature",
-            "root.sg1",
-            TSDataType.DOUBLE,
-            TSEncoding.GORILLA,
-            CompressionType.SNAPPY,
-            100,
-            tag,
-            attribute,
-            null,
-            null);
-
-    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-    showTimeSeriesResult.serialize(outputStream);
-    ByteBuffer byteBuffer = ByteBuffer.wrap(outputStream.toByteArray());
-    ShowTimeSeriesResult result = ShowTimeSeriesResult.deserialize(byteBuffer);
-
-    Assert.assertEquals("root.sg1.d1.s1", result.getName());
-    Assert.assertEquals("temperature", result.getAlias());
-    Assert.assertEquals("root.sg1", result.getSgName());
-    Assert.assertEquals(TSDataType.DOUBLE, result.getDataType());
-    Assert.assertEquals(TSEncoding.GORILLA, result.getEncoding());
-    Assert.assertEquals(CompressionType.SNAPPY, result.getCompressor());
-    Assert.assertEquals(100, result.getLastTime());
-    Assert.assertEquals(tag, result.getTag());
-    Assert.assertEquals(attribute, result.getAttribute());
-  }
-}
diff --git a/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java b/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java
deleted file mode 100644
index 06f93fe220..0000000000
--- a/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.dataset;
-
-// public class SingleDataSetTest {
-//  private final IPlanExecutor queryExecutor = new PlanExecutor();
-//  private final Planner processor = new Planner();
-//
-//  private final String[] sqls = {
-//    "CREATE DATABASE root.vehicle",
-//    "CREATE DATABASE root.test",
-//    "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
-//    "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
-//    "CREATE TIMESERIES root.test.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
-//    "CREATE TIMESERIES root.test.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
-//    "CREATE TIMESERIES root.test.d1.`\"s3+xy\"` WITH DATATYPE=TEXT, ENCODING=PLAIN"
-//  };
-//
-//  public SingleDataSetTest() throws QueryProcessException {}
-//
-//  @Before
-//  public void setUp() throws Exception {
-//    EnvironmentUtils.envSetUp();
-//    for (String sql : sqls) {
-//      queryExecutor.processNonQuery(processor.parseSQLToPhysicalPlan(sql));
-//    }
-//  }
-//
-//  @After
-//  public void tearDown() throws Exception {
-//    EnvironmentUtils.cleanEnv();
-//  }
-//
-//  @Test
-//  public void countDevice()
-//      throws QueryProcessException, TException, StorageEngineException,
-//          QueryFilterOptimizationException, MetadataException, IOException, InterruptedException,
-//          SQLException {
-//    PhysicalPlan plan = processor.parseSQLToPhysicalPlan("count devices");
-//    QueryDataSet dataSet = queryExecutor.processQuery(plan, EnvironmentUtils.TEST_QUERY_CONTEXT);
-//    Assert.assertTrue(dataSet instanceof SingleDataSet);
-//    Assert.assertEquals("[devices]", dataSet.getPaths().toString());
-//    while (dataSet.hasNext()) {
-//      RowRecord record = dataSet.next();
-//      Assert.assertEquals("0\t3", record.toString());
-//    }
-//  }
-//
-//  @Test
-//  public void countTimeSeries()
-//      throws QueryProcessException, TException, StorageEngineException,
-//          QueryFilterOptimizationException, MetadataException, IOException, InterruptedException,
-//          SQLException {
-//    PhysicalPlan plan = processor.parseSQLToPhysicalPlan("count TimeSeries");
-//    QueryDataSet dataSet = queryExecutor.processQuery(plan, EnvironmentUtils.TEST_QUERY_CONTEXT);
-//    Assert.assertTrue(dataSet instanceof SingleDataSet);
-//    Assert.assertEquals("[count]", dataSet.getPaths().toString());
-//    while (dataSet.hasNext()) {
-//      RowRecord record = dataSet.next();
-//      Assert.assertEquals("0\t5", record.toString());
-//    }
-//  }
-//
-//  @Test
-//  public void countStorageGroup()
-//      throws TException, StorageEngineException, QueryFilterOptimizationException,
-//          MetadataException, IOException, InterruptedException, SQLException,
-//          QueryProcessException {
-//    PhysicalPlan plan = processor.parseSQLToPhysicalPlan("count databases");
-//    QueryDataSet dataSet = queryExecutor.processQuery(plan, EnvironmentUtils.TEST_QUERY_CONTEXT);
-//    Assert.assertTrue(dataSet instanceof SingleDataSet);
-//    Assert.assertEquals("[database]", dataSet.getPaths().toString());
-//    while (dataSet.hasNext()) {
-//      RowRecord record = dataSet.next();
-//      Assert.assertEquals("0\t2", record.toString());
-//    }
-//  }
-//
-//  @Test
-//  public void countNodes()
-//      throws QueryProcessException, TException, StorageEngineException,
-//          QueryFilterOptimizationException, MetadataException, IOException, InterruptedException,
-//          SQLException {
-//    PhysicalPlan plan = processor.parseSQLToPhysicalPlan("count nodes root.test.** level=2");
-//    QueryDataSet dataSet = queryExecutor.processQuery(plan, EnvironmentUtils.TEST_QUERY_CONTEXT);
-//    Assert.assertTrue(dataSet instanceof SingleDataSet);
-//    Assert.assertEquals("[count]", dataSet.getPaths().toString());
-//    while (dataSet.hasNext()) {
-//      RowRecord record = dataSet.next();
-//      Assert.assertEquals("0\t2", record.toString());
-//    }
-//  }
-// }
diff --git a/server/src/test/java/org/apache/iotdb/db/tools/MLogParserTest.java b/server/src/test/java/org/apache/iotdb/db/tools/MLogParserTest.java
index 4d78adbae9..ab69d3ba72 100644
--- a/server/src/test/java/org/apache/iotdb/db/tools/MLogParserTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/tools/MLogParserTest.java
@@ -24,7 +24,7 @@ import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.metadata.MetadataConstant;
-import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.write.SchemaRegionWritePlanFactory;
 import org.apache.iotdb.db.metadata.schemaregion.SchemaEngine;
 import org.apache.iotdb.db.tools.schema.MLogParser;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
@@ -92,7 +92,7 @@ public class MLogParserTest {
             schemaEngine
                 .getSchemaRegion(new SchemaRegionId(schemaRegionIds[i]))
                 .createTimeseries(
-                    SchemaRegionPlanFactory.getCreateTimeSeriesPlan(
+                    SchemaRegionWritePlanFactory.getCreateTimeSeriesPlan(
                         new PartialPath("root.sg" + i + "." + "device" + j + "." + "s" + k),
                         TSDataType.INT32,
                         TSEncoding.PLAIN,