You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/05/27 10:58:27 UTC

[shardingsphere] branch master updated: Optimize actual meta data load logic (#18009)

This is an automated email from the ASF dual-hosted git repository.

zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 05b1f313908 Optimize actual meta data load logic (#18009)
05b1f313908 is described below

commit 05b1f313908c51081bf19776e661fd7b7c603371
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Fri May 27 18:58:20 2022 +0800

    Optimize actual meta data load logic (#18009)
    
    * optimize java doc
    
    * optimize actual meta data load logic
---
 .../metadata/EncryptSchemaMetaDataDecorator.java   | 11 ++--
 .../EncryptSchemaMetaDataDecoratorTest.java        | 29 +++++-----
 .../metadata/ShardingSchemaMetaDataDecorator.java  | 31 ++++++-----
 .../ShardingSchemaMetaDataDecoratorTest.java       | 12 ++---
 .../metadata/database/ShardingSphereDatabase.java  |  5 +-
 .../schema/builder/GenericSchemaBuilder.java       | 26 ++++-----
 .../schema/loader/SchemaMetaDataLoaderEngine.java  | 14 ++---
 .../loader/dialect/H2SchemaMetaDataLoader.java     |  9 ++--
 .../loader/dialect/MySQLSchemaMetaDataLoader.java  |  8 +--
 .../dialect/OpenGaussSchemaMetaDataLoader.java     | 10 ++--
 .../loader/dialect/OracleSchemaMetaDataLoader.java |  9 ++--
 .../dialect/PostgreSQLSchemaMetaDataLoader.java    | 10 ++--
 .../dialect/SQLServerSchemaMetaDataLoader.java     |  9 ++--
 .../schema/loader/model/SchemaMetaData.java        |  4 +-
 .../schema/loader/model/TableMetaData.java         | 58 ++------------------
 .../database/schema/util/SchemaMetaDataUtil.java   |  8 +--
 .../schema/builder/GenericSchemaBuilderTest.java   |  8 +--
 .../loader/common/TableMetaDataLoaderTest.java     | 23 ++++----
 .../loader/dialect/H2SchemaMetaDataLoaderTest.java | 19 ++++---
 .../dialect/MySQLSchemaMetaDataLoaderTest.java     | 25 +++++----
 .../dialect/OracleSchemaMetaDataLoaderTest.java    | 61 +++++++++++-----------
 .../PostgreSQLSchemaMetaDataLoaderTest.java        | 19 ++++---
 .../dialect/SQLServerSchemaMetaDataLoaderTest.java | 19 ++++---
 .../database/schema/model/TableMetaDataTest.java   |  9 +---
 .../schema/util/SchemaMetaDataUtilTest.java        | 12 ++---
 .../SingleTableSchemaMetaDataDecorator.java        | 15 +++---
 .../SingleTableSchemaMetaDataBuilderTest.java      | 26 ++++-----
 27 files changed, 214 insertions(+), 275 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
index f8c6d3bec2d..ad4783bfe29 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
@@ -43,9 +43,9 @@ public final class EncryptSchemaMetaDataDecorator implements RuleBasedSchemaMeta
     public Map<String, SchemaMetaData> decorate(final Map<String, SchemaMetaData> schemaMetaDataMap, final EncryptRule rule, final GenericSchemaBuilderMaterials materials) {
         Map<String, SchemaMetaData> result = new LinkedHashMap<>(schemaMetaDataMap.size(), 1);
         for (Entry<String, SchemaMetaData> entry : schemaMetaDataMap.entrySet()) {
-            Map<String, TableMetaData> tables = new LinkedHashMap<>(entry.getValue().getTables().size(), 1);
-            for (Entry<String, TableMetaData> tableEntry : entry.getValue().getTables().entrySet()) {
-                tables.put(tableEntry.getKey(), decorate(tableEntry.getKey(), tableEntry.getValue(), rule));
+            Collection<TableMetaData> tables = new LinkedList<>();
+            for (TableMetaData each : entry.getValue().getTables()) {
+                tables.add(decorate(each.getName(), each, rule));
             }
             result.put(entry.getKey(), new SchemaMetaData(entry.getKey(), tables));
         }
@@ -53,9 +53,8 @@ public final class EncryptSchemaMetaDataDecorator implements RuleBasedSchemaMeta
     }
     
     private TableMetaData decorate(final String tableName, final TableMetaData tableMetaData, final EncryptRule encryptRule) {
-        Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
-        return encryptTable.map(optional -> new TableMetaData(tableName, getEncryptColumnMetaDataList(optional, tableMetaData.getColumns().values()),
-                tableMetaData.getIndexes().values(), tableMetaData.getConstrains().values())).orElse(tableMetaData);
+        return encryptRule.findEncryptTable(tableName).map(optional -> new TableMetaData(tableName,
+                getEncryptColumnMetaDataList(optional, tableMetaData.getColumns()), tableMetaData.getIndexes(), tableMetaData.getConstrains())).orElse(tableMetaData);
     }
     
     private Collection<ColumnMetaData> getEncryptColumnMetaDataList(final EncryptTable encryptTable, final Collection<ColumnMetaData> originalColumnMetaDataList) {
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
index 22dd4adad8b..34062d1503a 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecoratorTest.java
@@ -32,8 +32,8 @@ import org.junit.Test;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -51,28 +51,31 @@ public final class EncryptSchemaMetaDataDecoratorTest {
     public void assertDecorate() {
         EncryptRule rule = createEncryptRule();
         EncryptSchemaMetaDataDecorator loader = getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
-        tableMetaDataMap.put("t_encrypt", createTableMetaData());
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
+        tableMetaDataList.add(createTableMetaData());
         TableMetaData actual = loader.decorate(Collections.singletonMap("logic_db",
-                new SchemaMetaData("logic_db", tableMetaDataMap)), rule, mock(GenericSchemaBuilderMaterials.class)).get("logic_db").getTables().get("t_encrypt");
+                new SchemaMetaData("logic_db", tableMetaDataList)), rule, mock(GenericSchemaBuilderMaterials.class)).get("logic_db").getTables().iterator().next();
         assertThat(actual.getColumns().size(), is(2));
-        assertTrue(actual.getColumns().containsKey("id"));
-        assertTrue(actual.getColumns().containsKey("pwd"));
+        Iterator<ColumnMetaData> columnsIterator = actual.getColumns().iterator();
+        assertThat(columnsIterator.next().getName(), is("id"));
+        assertThat(columnsIterator.next().getName(), is("pwd"));
     }
     
     @Test
     public void assertDecorateWithConfigDataType() {
         EncryptRule rule = createEncryptRuleWithDataTypeConfig();
         EncryptSchemaMetaDataDecorator loader = getEncryptMetaDataBuilder(rule, Collections.singleton(rule));
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
-        tableMetaDataMap.put("t_encrypt", createTableMetaData());
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
+        tableMetaDataList.add(createTableMetaData());
         GenericSchemaBuilderMaterials materials = mock(GenericSchemaBuilderMaterials.class, RETURNS_DEEP_STUBS);
         TableMetaData actual = loader.decorate(Collections.singletonMap("logic_db",
-                new SchemaMetaData("logic_db", tableMetaDataMap)), rule, materials).get("logic_db").getTables().get("t_encrypt");
+                new SchemaMetaData("logic_db", tableMetaDataList)), rule, materials).get("logic_db").getTables().iterator().next();
         assertThat(actual.getColumns().size(), is(2));
-        assertTrue(actual.getColumns().containsKey("id"));
-        assertTrue(actual.getColumns().containsKey("pwd"));
-        assertThat(actual.getColumns().get("pwd").getDataType(), is(12));
+        Iterator<ColumnMetaData> columnsIterator = actual.getColumns().iterator();
+        assertThat(columnsIterator.next().getName(), is("id"));
+        ColumnMetaData columnMetaData = columnsIterator.next();
+        assertThat(columnMetaData.getName(), is("pwd"));
+        assertThat(columnMetaData.getDataType(), is(12));
     }
     
     private EncryptRule createEncryptRuleWithDataTypeConfig() {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
index 48662221d21..92935f6028a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
@@ -52,12 +52,12 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
         Map<String, SchemaMetaData> result = new LinkedHashMap<>(schemaMetaDataMap.size(), 1);
         boolean isCheckingMetaData = materials.getProps().getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED);
         for (Entry<String, SchemaMetaData> entry : schemaMetaDataMap.entrySet()) {
-            Map<String, TableMetaData> tables = new LinkedHashMap<>(entry.getValue().getTables().size(), 1);
+            Collection<TableMetaData> tables = new LinkedList<>();
             for (Entry<String, Collection<TableMetaData>> tableEntry : getLogicTableMetaDataMap(entry.getValue(), rule).entrySet()) {
                 if (isCheckingMetaData) {
                     checkUniformed(tableEntry.getKey(), tableEntry.getValue());
                 }
-                tables.put(tableEntry.getKey(), tableEntry.getValue().iterator().next());
+                tables.add(tableEntry.getValue().iterator().next());
             }
             result.put(entry.getKey(), new SchemaMetaData(entry.getKey(), tables));
         }
@@ -77,10 +77,10 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
     
     private Map<String, Collection<TableMetaData>> getLogicTableMetaDataMap(final SchemaMetaData schemaMetaData, final ShardingRule rule) {
         Map<String, Collection<TableMetaData>> result = new LinkedHashMap<>();
-        for (Entry<String, TableMetaData> entry : schemaMetaData.getTables().entrySet()) {
-            String logicTableName = rule.findLogicTableByActualTable(entry.getKey()).orElse(entry.getKey());
+        for (TableMetaData each : schemaMetaData.getTables()) {
+            String logicTableName = rule.findLogicTableByActualTable(each.getName()).orElse(each.getName());
             Collection<TableMetaData> tableMetaDataList = result.computeIfAbsent(logicTableName, key -> new LinkedList<>());
-            tableMetaDataList.add(decorate(entry.getValue(), rule));
+            tableMetaDataList.add(decorate(each, rule));
         }
         return result;
     }
@@ -105,19 +105,18 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
     
     private Collection<ColumnMetaData> getColumnMetaDataList(final TableMetaData tableMetaData, final TableRule tableRule) {
         Collection<ColumnMetaData> result = new LinkedList<>();
-        for (Entry<String, ColumnMetaData> entry : tableMetaData.getColumns().entrySet()) {
-            boolean generated = entry.getKey().equalsIgnoreCase(tableRule.getGenerateKeyColumn().orElse(null));
-            ColumnMetaData columnMetaData = entry.getValue();
-            result.add(new ColumnMetaData(columnMetaData.getName(), columnMetaData.getDataType(), columnMetaData.isPrimaryKey(), generated, columnMetaData.isCaseSensitive()));
+        for (ColumnMetaData each : tableMetaData.getColumns()) {
+            boolean generated = each.getName().equalsIgnoreCase(tableRule.getGenerateKeyColumn().orElse(null));
+            result.add(new ColumnMetaData(each.getName(), each.getDataType(), each.isPrimaryKey(), generated, each.isCaseSensitive()));
         }
         return result;
     }
     
     private Collection<IndexMetaData> getIndexMetaDataList(final TableMetaData tableMetaData, final TableRule tableRule) {
         Collection<IndexMetaData> result = new HashSet<>();
-        for (Entry<String, IndexMetaData> entry : tableMetaData.getIndexes().entrySet()) {
-            for (DataNode each : tableRule.getActualDataNodes()) {
-                getLogicIndex(entry.getValue().getName(), each.getTableName()).ifPresent(optional -> result.add(new IndexMetaData(optional)));
+        for (IndexMetaData each : tableMetaData.getIndexes()) {
+            for (DataNode dataNode : tableRule.getActualDataNodes()) {
+                getLogicIndex(each.getName(), dataNode.getTableName()).ifPresent(optional -> result.add(new IndexMetaData(optional)));
             }
         }
         return result;
@@ -125,10 +124,10 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
     
     private Collection<ConstraintMetaData> getConstraintMetaDataList(final TableMetaData tableMetaData, final ShardingRule shardingRule, final TableRule tableRule) {
         Collection<ConstraintMetaData> result = new HashSet<>();
-        for (Entry<String, ConstraintMetaData> entry : tableMetaData.getConstrains().entrySet()) {
-            for (DataNode each : tableRule.getActualDataNodes()) {
-                String referencedTableName = entry.getValue().getReferencedTableName();
-                getLogicIndex(entry.getKey(), each.getTableName()).ifPresent(optional -> result.add(
+        for (ConstraintMetaData each : tableMetaData.getConstrains()) {
+            for (DataNode dataNode : tableRule.getActualDataNodes()) {
+                String referencedTableName = each.getReferencedTableName();
+                getLogicIndex(each.getName(), dataNode.getTableName()).ifPresent(optional -> result.add(
                         new ConstraintMetaData(optional, shardingRule.findLogicTableByActualTable(referencedTableName).orElse(referencedTableName))));
             }
         }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
index 7fb209d7e10..9f023e592b1 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecoratorTest.java
@@ -31,7 +31,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
@@ -51,14 +51,14 @@ public final class ShardingSchemaMetaDataDecoratorTest {
         when(shardingRule.findLogicTableByActualTable(TABLE_NAME)).thenReturn(Optional.of(TABLE_NAME));
         Collection<ShardingSphereRule> rules = Collections.singletonList(shardingRule);
         ShardingSchemaMetaDataDecorator builder = (ShardingSchemaMetaDataDecorator) RuleBasedSchemaMetaDataDecoratorFactory.getInstances(rules).get(shardingRule);
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
-        tableMetaDataMap.put(TABLE_NAME, createTableMetaData());
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
+        tableMetaDataList.add(createTableMetaData());
         GenericSchemaBuilderMaterials materials = mock(GenericSchemaBuilderMaterials.class);
         when(materials.getProps()).thenReturn(new ConfigurationProperties(new Properties()));
         Map<String, SchemaMetaData> actual = builder.decorate(Collections.singletonMap("sharding_db",
-                new SchemaMetaData("sharding_db", tableMetaDataMap)), shardingRule, materials);
-        Map<String, ColumnMetaData> columns = actual.get("sharding_db").getTables().get(TABLE_NAME).getColumns();
-        Iterator<ColumnMetaData> iterator = columns.values().iterator();
+                new SchemaMetaData("sharding_db", tableMetaDataList)), shardingRule, materials);
+        Collection<ColumnMetaData> columns = actual.get("sharding_db").getTables().iterator().next().getColumns();
+        Iterator<ColumnMetaData> iterator = columns.iterator();
         assertTrue(iterator.next().isGenerated());
         assertFalse(iterator.next().isGenerated());
         assertFalse(iterator.next().isGenerated());
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 6471d651e92..e7236b3a1d9 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -25,10 +25,10 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
 import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
 import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
 import org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
+import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRulesBuilder;
 
@@ -72,8 +72,7 @@ public final class ShardingSphereDatabase {
                                                 final DatabaseConfiguration databaseConfig, final ConfigurationProperties props) throws SQLException {
         Collection<ShardingSphereRule> databaseRules = DatabaseRulesBuilder.build(name, databaseConfig, props);
         Map<String, ShardingSphereSchema> schemas = new ConcurrentHashMap<>();
-        schemas.putAll(GenericSchemaBuilder.build(new GenericSchemaBuilderMaterials(
-                protocolType, storageType, databaseConfig.getDataSources(), databaseRules, props, name)));
+        schemas.putAll(GenericSchemaBuilder.build(new GenericSchemaBuilderMaterials(protocolType, storageType, databaseConfig.getDataSources(), databaseRules, props, name)));
         schemas.putAll(SystemSchemaBuilder.build(name, protocolType));
         return create(name, protocolType, databaseConfig, databaseRules, schemas);
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index 2e62c4fe2af..d8b6fb049a1 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -86,19 +86,19 @@ public final class GenericSchemaBuilder {
     
     private static Map<String, SchemaMetaData> loadSchemas(final Collection<String> tableNames, final GenericSchemaBuilderMaterials materials) throws SQLException {
         boolean isCheckingMetaData = materials.getProps().getValue(ConfigurationPropertyKey.CHECK_TABLE_METADATA_ENABLED);
-        Collection<SchemaMetaDataLoaderMaterials> tableMetaDataLoaderMaterials = SchemaMetaDataUtil.getSchemaMetaDataLoadMaterials(tableNames, materials, isCheckingMetaData);
-        if (tableMetaDataLoaderMaterials.isEmpty()) {
+        Collection<SchemaMetaDataLoaderMaterials> schemaMetaDataLoaderMaterials = SchemaMetaDataUtil.getSchemaMetaDataLoaderMaterials(tableNames, materials, isCheckingMetaData);
+        if (schemaMetaDataLoaderMaterials.isEmpty()) {
             return Collections.emptyMap();
         }
-        return SchemaMetaDataLoaderEngine.load(tableMetaDataLoaderMaterials, materials.getStorageType());
+        return SchemaMetaDataLoaderEngine.load(schemaMetaDataLoaderMaterials, materials.getStorageType());
     }
     
     private static Map<String, SchemaMetaData> translate(final Map<String, SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials materials) {
         Map<String, SchemaMetaData> result = new LinkedHashMap<>();
-        Map<String, TableMetaData> tableMetaDataMap = Optional.ofNullable(schemaMetaDataMap.get(
-                DatabaseTypeEngine.getDefaultSchemaName(materials.getStorageType(), materials.getDefaultSchemaName()))).map(SchemaMetaData::getTables).orElseGet(Collections::emptyMap);
+        Collection<TableMetaData> tableMetaDataList = Optional.ofNullable(schemaMetaDataMap.get(
+                DatabaseTypeEngine.getDefaultSchemaName(materials.getStorageType(), materials.getDefaultSchemaName()))).map(SchemaMetaData::getTables).orElseGet(Collections::emptyList);
         String frontendSchemaName = DatabaseTypeEngine.getDefaultSchemaName(materials.getProtocolType(), materials.getDefaultSchemaName());
-        result.put(frontendSchemaName, new SchemaMetaData(frontendSchemaName, tableMetaDataMap));
+        result.put(frontendSchemaName, new SchemaMetaData(frontendSchemaName, tableMetaDataList));
         return result;
     }
     
@@ -126,13 +126,13 @@ public final class GenericSchemaBuilder {
         return result;
     }
     
-    private static Map<String, ShardingSphereTable> convertToTableMap(final Map<String, TableMetaData> tableMetaDataMap) {
-        Map<String, ShardingSphereTable> result = new LinkedHashMap<>(tableMetaDataMap.size(), 1);
-        for (Entry<String, TableMetaData> entry : tableMetaDataMap.entrySet()) {
-            Collection<ShardingSphereColumn> columns = convertToColumns(entry.getValue().getColumns().values());
-            Collection<ShardingSphereIndex> indexes = convertToIndexes(entry.getValue().getIndexes().values());
-            Collection<ShardingSphereConstraint> constraints = convertToConstraints(entry.getValue().getConstrains().values());
-            result.put(entry.getKey(), new ShardingSphereTable(entry.getValue().getName(), columns, indexes, constraints));
+    private static Map<String, ShardingSphereTable> convertToTableMap(final Collection<TableMetaData> tableMetaDataList) {
+        Map<String, ShardingSphereTable> result = new LinkedHashMap<>(tableMetaDataList.size(), 1);
+        for (TableMetaData each : tableMetaDataList) {
+            Collection<ShardingSphereColumn> columns = convertToColumns(each.getColumns());
+            Collection<ShardingSphereIndex> indexes = convertToIndexes(each.getIndexes());
+            Collection<ShardingSphereConstraint> constraints = convertToConstraints(each.getConstrains());
+            result.put(each.getName(), new ShardingSphereTable(each.getName(), columns, indexes, constraints));
         }
         return result;
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
index 0deb1755056..4da224991be 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
@@ -48,12 +48,12 @@ import java.util.concurrent.TimeUnit;
 public final class SchemaMetaDataLoaderEngine {
     
     private static final ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2, Runtime.getRuntime().availableProcessors() * 2,
-            0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ShardingSphere-TableMetaDataLoaderEngine-%d").build());
+            0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ShardingSphere-SchemaMetaDataLoaderEngine-%d").build());
     
     /**
      * Load schema meta data.
      *
-     * @param materials table meta data load material
+     * @param materials schema meta data loader materials
      * @param databaseType database type
      * @return schema meta data map
      * @throws SQLException SQL exception
@@ -64,7 +64,7 @@ public final class SchemaMetaDataLoaderEngine {
             try {
                 return loadByDialect(dialectTableMetaDataLoader.get(), materials);
             } catch (final SQLException | ShardingSphereException ex) {
-                log.error("Dialect load table meta data error", ex);
+                log.error("Dialect load table meta data error.", ex);
                 return loadByDefault(materials, databaseType);
             }
         }
@@ -72,12 +72,12 @@ public final class SchemaMetaDataLoaderEngine {
     }
     
     private static Map<String, SchemaMetaData> loadByDefault(final Collection<SchemaMetaDataLoaderMaterials> materials, final DatabaseType databaseType) throws SQLException {
-        Map<String, TableMetaData> result = new LinkedHashMap<>();
+        Collection<TableMetaData> result = new LinkedList<>();
         String defaultSchemaName = null;
         for (SchemaMetaDataLoaderMaterials each : materials) {
             defaultSchemaName = each.getDefaultSchemaName();
             for (String tableName : each.getActualTableNames()) {
-                TableMetaDataLoader.load(each.getDataSource(), tableName, databaseType).ifPresent(optional -> result.put(tableName, optional));
+                TableMetaDataLoader.load(each.getDataSource(), tableName, databaseType).ifPresent(result::add);
             }
         }
         return Collections.singletonMap(defaultSchemaName, new SchemaMetaData(defaultSchemaName, result));
@@ -104,8 +104,8 @@ public final class SchemaMetaDataLoaderEngine {
     
     private static void mergeSchemaMetaDataMap(final Map<String, SchemaMetaData> schemaMetaDataMap, final Collection<SchemaMetaData> addedSchemaMetaDataList) {
         for (SchemaMetaData each : addedSchemaMetaDataList) {
-            SchemaMetaData schemaMetaData = schemaMetaDataMap.computeIfAbsent(each.getName(), key -> new SchemaMetaData(each.getName(), new LinkedHashMap<>()));
-            schemaMetaData.getTables().putAll(each.getTables());
+            SchemaMetaData schemaMetaData = schemaMetaDataMap.computeIfAbsent(each.getName(), key -> new SchemaMetaData(each.getName(), new LinkedList<>()));
+            schemaMetaData.getTables().addAll(each.getTables());
         }
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoader.java
index d2cd7b37123..60eb35221ce 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoader.java
@@ -18,11 +18,11 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -32,7 +32,6 @@ import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -66,16 +65,16 @@ public final class H2SchemaMetaDataLoader implements DialectSchemaMetaDataLoader
     
     @Override
     public Collection<SchemaMetaData> load(final DataSource dataSource, final Collection<String> tables, final String defaultSchemaName) throws SQLException {
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
         try (Connection connection = dataSource.getConnection()) {
             Map<String, Collection<ColumnMetaData>> columnMetaDataMap = loadColumnMetaDataMap(connection, tables);
             Map<String, Collection<IndexMetaData>> indexMetaDataMap = columnMetaDataMap.isEmpty() ? Collections.emptyMap() : loadIndexMetaData(connection, columnMetaDataMap.keySet());
             for (Entry<String, Collection<ColumnMetaData>> entry : columnMetaDataMap.entrySet()) {
                 Collection<IndexMetaData> indexMetaDataList = indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
-                tableMetaDataMap.put(entry.getKey(), new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, Collections.emptyList()));
+                tableMetaDataList.add(new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, Collections.emptyList()));
             }
         }
-        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataMap));
+        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataList));
     }
     
     private Map<String, Collection<ColumnMetaData>> loadColumnMetaDataMap(final Connection connection, final Collection<String> tables) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoader.java
index 8b896c54f96..d6a5622a492 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoader.java
@@ -19,12 +19,12 @@ package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.datasource.registry.GlobalDataSourceRegistry;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -62,16 +62,16 @@ public final class MySQLSchemaMetaDataLoader implements DialectSchemaMetaDataLoa
     
     @Override
     public Collection<SchemaMetaData> load(final DataSource dataSource, final Collection<String> tables, final String defaultSchemaName) throws SQLException {
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
         Map<String, Collection<ColumnMetaData>> columnMetaDataMap = loadColumnMetaDataMap(dataSource, tables);
         Map<String, Collection<IndexMetaData>> indexMetaDataMap = columnMetaDataMap.isEmpty() ? Collections.emptyMap() : loadIndexMetaData(dataSource, columnMetaDataMap.keySet());
         Map<String, Collection<ConstraintMetaData>> constraintMetaDataMap = columnMetaDataMap.isEmpty() ? Collections.emptyMap() : loadConstraintMetaDataMap(dataSource, columnMetaDataMap.keySet());
         for (Entry<String, Collection<ColumnMetaData>> entry : columnMetaDataMap.entrySet()) {
             Collection<IndexMetaData> indexMetaDataList = indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
             Collection<ConstraintMetaData> constraintMetaDataList = constraintMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
-            tableMetaDataMap.put(entry.getKey(), new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, constraintMetaDataList));
+            tableMetaDataList.add(new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, constraintMetaDataList));
         }
-        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataMap));
+        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataList));
     }
     
     private Map<String, Collection<ConstraintMetaData>> loadConstraintMetaDataMap(final DataSource dataSource, final Collection<String> tables) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OpenGaussSchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OpenGaussSchemaMetaDataLoader.java
index 8983464287c..cfaa119f74a 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OpenGaussSchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OpenGaussSchemaMetaDataLoader.java
@@ -21,11 +21,11 @@ import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -68,17 +68,17 @@ public final class OpenGaussSchemaMetaDataLoader implements DialectSchemaMetaDat
         for (String each : schemaNames) {
             Multimap<String, IndexMetaData> tableIndexMetaDataMap = schemaIndexMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
             Multimap<String, ColumnMetaData> tableColumnMetaDataMap = schemaColumnMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
-            result.add(new SchemaMetaData(each, createTableMetaDataMap(tableIndexMetaDataMap, tableColumnMetaDataMap)));
+            result.add(new SchemaMetaData(each, createTableMetaDataList(tableIndexMetaDataMap, tableColumnMetaDataMap)));
         }
         return result;
     }
     
-    private Map<String, TableMetaData> createTableMetaDataMap(final Multimap<String, IndexMetaData> tableIndexMetaDataMap, final Multimap<String, ColumnMetaData> tableColumnMetaDataMap) {
-        Map<String, TableMetaData> result = new LinkedHashMap<>();
+    private Collection<TableMetaData> createTableMetaDataList(final Multimap<String, IndexMetaData> tableIndexMetaDataMap, final Multimap<String, ColumnMetaData> tableColumnMetaDataMap) {
+        Collection<TableMetaData> result = new LinkedList<>();
         for (String each : tableColumnMetaDataMap.keySet()) {
             Collection<ColumnMetaData> columnMetaDataList = tableColumnMetaDataMap.get(each);
             Collection<IndexMetaData> indexMetaDataList = tableIndexMetaDataMap.get(each);
-            result.put(each, new TableMetaData(each, columnMetaDataList, indexMetaDataList, Collections.emptyList()));
+            result.add(new TableMetaData(each, columnMetaDataList, indexMetaDataList, Collections.emptyList()));
         }
         return result;
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
index b652fe37ffd..920825bfe80 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
@@ -19,11 +19,11 @@ package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import com.google.common.collect.Lists;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -36,7 +36,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -81,11 +80,11 @@ public final class OracleSchemaMetaDataLoader implements DialectSchemaMetaDataLo
                 indexMetaDataMap.putAll(loadIndexMetaData(connection, each));
             }
         }
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
         for (Entry<String, Collection<ColumnMetaData>> entry : columnMetaDataMap.entrySet()) {
-            tableMetaDataMap.put(entry.getKey(), new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList()), Collections.emptyList()));
+            tableMetaDataList.add(new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList()), Collections.emptyList()));
         }
-        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataMap));
+        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataList));
     }
     
     private Map<String, Collection<ColumnMetaData>> loadColumnMetaDataMap(final Connection connection, final Collection<String> tables) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoader.java
index 9426e13cda4..210b753c01d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoader.java
@@ -21,11 +21,11 @@ import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -72,17 +72,17 @@ public final class PostgreSQLSchemaMetaDataLoader implements DialectSchemaMetaDa
         for (String each : schemaNames) {
             Multimap<String, IndexMetaData> tableIndexMetaDataMap = schemaIndexMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
             Multimap<String, ColumnMetaData> tableColumnMetaDataMap = schemaColumnMetaDataMap.getOrDefault(each, LinkedHashMultimap.create());
-            result.add(new SchemaMetaData(each, createTableMetaDataMap(tableIndexMetaDataMap, tableColumnMetaDataMap)));
+            result.add(new SchemaMetaData(each, createTableMetaDataList(tableIndexMetaDataMap, tableColumnMetaDataMap)));
         }
         return result;
     }
     
-    private Map<String, TableMetaData> createTableMetaDataMap(final Multimap<String, IndexMetaData> tableIndexMetaDataMap, final Multimap<String, ColumnMetaData> tableColumnMetaDataMap) {
-        Map<String, TableMetaData> result = new LinkedHashMap<>();
+    private Collection<TableMetaData> createTableMetaDataList(final Multimap<String, IndexMetaData> tableIndexMetaDataMap, final Multimap<String, ColumnMetaData> tableColumnMetaDataMap) {
+        Collection<TableMetaData> result = new LinkedList<>();
         for (String each : tableColumnMetaDataMap.keySet()) {
             Collection<ColumnMetaData> columnMetaDataList = tableColumnMetaDataMap.get(each);
             Collection<IndexMetaData> indexMetaDataList = tableIndexMetaDataMap.get(each);
-            result.put(each, new TableMetaData(each, columnMetaDataList, indexMetaDataList, Collections.emptyList()));
+            result.add(new TableMetaData(each, columnMetaDataList, indexMetaDataList, Collections.emptyList()));
         }
         return result;
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoader.java
index dc3aecb10e3..8203c9dccdc 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoader.java
@@ -18,11 +18,11 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.common.DataTypeLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
@@ -32,7 +32,6 @@ import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -60,16 +59,16 @@ public final class SQLServerSchemaMetaDataLoader implements DialectSchemaMetaDat
     
     @Override
     public Collection<SchemaMetaData> load(final DataSource dataSource, final Collection<String> tables, final String defaultSchemaName) throws SQLException {
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
         Map<String, Collection<ColumnMetaData>> columnMetaDataMap = loadColumnMetaDataMap(dataSource, tables);
         if (!columnMetaDataMap.isEmpty()) {
             Map<String, Collection<IndexMetaData>> indexMetaDataMap = loadIndexMetaData(dataSource, columnMetaDataMap.keySet());
             for (Entry<String, Collection<ColumnMetaData>> entry : columnMetaDataMap.entrySet()) {
                 Collection<IndexMetaData> indexMetaDataList = indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
-                tableMetaDataMap.put(entry.getKey(), new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, Collections.emptyList()));
+                tableMetaDataList.add(new TableMetaData(entry.getKey(), entry.getValue(), indexMetaDataList, Collections.emptyList()));
             }
         }
-        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataMap));
+        return Collections.singletonList(new SchemaMetaData(defaultSchemaName, tableMetaDataList));
     }
     
     private Map<String, Collection<ColumnMetaData>> loadColumnMetaDataMap(final DataSource dataSource, final Collection<String> tables) throws SQLException {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/SchemaMetaData.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/SchemaMetaData.java
index d9df37b5b83..7252bd923a6 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/SchemaMetaData.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/SchemaMetaData.java
@@ -22,7 +22,7 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.ToString;
 
-import java.util.Map;
+import java.util.Collection;
 
 /**
  * Schema meta data.
@@ -35,5 +35,5 @@ public final class SchemaMetaData {
     
     private final String name;
     
-    private final Map<String, TableMetaData> tables;
+    private final Collection<TableMetaData> tables;
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/TableMetaData.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/TableMetaData.java
index 41926bea65d..7806fd9c320 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/TableMetaData.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/model/TableMetaData.java
@@ -19,18 +19,15 @@ package org.apache.shardingsphere.infra.metadata.database.schema.loader.model;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import lombok.ToString;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
 
 /**
  * Table meta data.
  */
+@RequiredArgsConstructor
 @Getter
 @EqualsAndHashCode
 @ToString
@@ -38,54 +35,9 @@ public final class TableMetaData {
     
     private final String name;
     
-    private final Map<String, ColumnMetaData> columns;
+    private final Collection<ColumnMetaData> columns;
     
-    private final Map<String, IndexMetaData> indexes;
+    private final Collection<IndexMetaData> indexes;
     
-    private final Map<String, ConstraintMetaData> constrains;
-    
-    private final List<String> columnNames = new ArrayList<>();
-    
-    private final List<String> primaryKeyColumns = new ArrayList<>();
-    
-    public TableMetaData() {
-        this("", Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
-    }
-    
-    public TableMetaData(final String name, final Collection<ColumnMetaData> columnMetaDataList,
-                         final Collection<IndexMetaData> indexMetaDataList, final Collection<ConstraintMetaData> constraintMetaDataList) {
-        this.name = name;
-        columns = getColumns(columnMetaDataList);
-        indexes = getIndexes(indexMetaDataList);
-        constrains = getConstrains(constraintMetaDataList);
-    }
-    
-    private Map<String, ColumnMetaData> getColumns(final Collection<ColumnMetaData> columnMetaDataList) {
-        Map<String, ColumnMetaData> result = new LinkedHashMap<>(columnMetaDataList.size(), 1);
-        for (ColumnMetaData each : columnMetaDataList) {
-            String lowerColumnName = each.getName().toLowerCase();
-            result.put(lowerColumnName, each);
-            columnNames.add(each.getName());
-            if (each.isPrimaryKey()) {
-                primaryKeyColumns.add(lowerColumnName);
-            }
-        }
-        return result;
-    }
-    
-    private Map<String, IndexMetaData> getIndexes(final Collection<IndexMetaData> indexMetaDataList) {
-        Map<String, IndexMetaData> result = new LinkedHashMap<>(indexMetaDataList.size(), 1);
-        for (IndexMetaData each : indexMetaDataList) {
-            result.put(each.getName().toLowerCase(), each);
-        }
-        return result;
-    }
-    
-    private Map<String, ConstraintMetaData> getConstrains(final Collection<ConstraintMetaData> constraintMetaDataList) {
-        Map<String, ConstraintMetaData> result = new LinkedHashMap<>(constraintMetaDataList.size(), 1);
-        for (ConstraintMetaData each : constraintMetaDataList) {
-            result.put(each.getName().toLowerCase(), each);
-        }
-        return result;
-    }
+    private final Collection<ConstraintMetaData> constrains;
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtil.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtil.java
index b8aadeb02ae..690bed0887e 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtil.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtil.java
@@ -41,15 +41,15 @@ import java.util.stream.Collectors;
 public class SchemaMetaDataUtil {
     
     /**
-     * Get schema meta data load materials.
+     * Get schema meta data loader materials.
      *
      * @param tableNames table name collection
      * @param materials materials
      * @param checkMetaDataEnable check meta data enable config
-     * @return schema meta data load materials
+     * @return schema meta data loader materials
      */
-    public static Collection<SchemaMetaDataLoaderMaterials> getSchemaMetaDataLoadMaterials(final Collection<String> tableNames,
-                                                                                           final GenericSchemaBuilderMaterials materials, final boolean checkMetaDataEnable) {
+    public static Collection<SchemaMetaDataLoaderMaterials> getSchemaMetaDataLoaderMaterials(final Collection<String> tableNames,
+                                                                                             final GenericSchemaBuilderMaterials materials, final boolean checkMetaDataEnable) {
         Map<String, Collection<String>> dataSourceTableGroups = new LinkedHashMap<>();
         DataNodes dataNodes = new DataNodes(materials.getRules());
         for (String each : tableNames) {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
index 1144e42cebc..c137a78aaa3 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
@@ -41,7 +41,7 @@ import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Properties;
 
@@ -107,11 +107,11 @@ public final class GenericSchemaBuilderTest {
     
     private Map<String, SchemaMetaData> mockSchemaMetaDataMap(final Collection<String> tableNames, final GenericSchemaBuilderMaterials materials) {
         if (!tableNames.isEmpty() && (tableNames.contains("data_node_routed_table1") || tableNames.contains("data_node_routed_table2"))) {
-            Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
+            Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
             for (String each : tableNames) {
-                tableMetaDataMap.put(each, new TableMetaData(each, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+                tableMetaDataList.add(new TableMetaData(each, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
             }
-            return Collections.singletonMap(materials.getDefaultSchemaName(), new SchemaMetaData(materials.getDefaultSchemaName(), tableMetaDataMap));
+            return Collections.singletonMap(materials.getDefaultSchemaName(), new SchemaMetaData(materials.getDefaultSchemaName(), tableMetaDataList));
         }
         return Collections.emptyMap();
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/TableMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/TableMetaDataLoaderTest.java
index 9312a37eec5..2289fd005ac 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/TableMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/TableMetaDataLoaderTest.java
@@ -36,7 +36,9 @@ import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Types;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -105,17 +107,16 @@ public final class TableMetaDataLoaderTest {
         when(databaseType.formatTableNamePattern(TEST_TABLE)).thenReturn(TEST_TABLE);
         Map<String, SchemaMetaData> actual = SchemaMetaDataLoaderEngine.load(Collections.singletonList(
                 new SchemaMetaDataLoaderMaterials(Collections.singletonList(TEST_TABLE), dataSource, "sharding_db")), databaseType);
-        assertFalse(actual.isEmpty());
-        assertTrue(actual.containsKey("sharding_db"));
-        assertTrue(actual.get("sharding_db").getTables().containsKey(TEST_TABLE));
-        TableMetaData tableMetaData = actual.get("sharding_db").getTables().get(TEST_TABLE);
-        Map<String, ColumnMetaData> columnMetaDataMap = tableMetaData.getColumns();
-        assertThat(columnMetaDataMap.size(), is(2));
-        assertColumnMetaData(columnMetaDataMap.get("pk_col"), "pk_col", Types.INTEGER, true, true);
-        assertColumnMetaData(columnMetaDataMap.get("col"), "col", Types.VARCHAR, false, false);
-        Map<String, IndexMetaData> indexMetaDataMap = tableMetaData.getIndexes();
-        assertThat(indexMetaDataMap.size(), is(1));
-        assertTrue(indexMetaDataMap.containsKey("my_index"));
+        TableMetaData tableMetaData = actual.get("sharding_db").getTables().iterator().next();
+        Collection<ColumnMetaData> columns = tableMetaData.getColumns();
+        assertThat(columns.size(), is(2));
+        Iterator<ColumnMetaData> columnsIterator = columns.iterator();
+        assertColumnMetaData(columnsIterator.next(), "pk_col", Types.INTEGER, true, true);
+        assertColumnMetaData(columnsIterator.next(), "col", Types.VARCHAR, false, false);
+        Collection<IndexMetaData> indexes = tableMetaData.getIndexes();
+        assertThat(indexes.size(), is(1));
+        Iterator<IndexMetaData> indexesIterator = indexes.iterator();
+        assertThat(indexesIterator.next().getName(), is("my_index"));
     }
     
     private void assertColumnMetaData(final ColumnMetaData actual, final String name, final int dataType, final boolean primaryKey, final boolean caseSensitive) {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoaderTest.java
index 157adef51af..8c68becf058 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/H2SchemaMetaDataLoaderTest.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -154,13 +153,13 @@ public final class H2SchemaMetaDataLoaderTest {
     
     private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
         assertThat(schemaMetaDataList.size(), is(1));
-        assertTrue(schemaMetaDataList.iterator().next().getTables().containsKey("tbl"));
-        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().get("tbl");
+        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().iterator().next();
         assertThat(actualTableMetaData.getColumns().size(), is(2));
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, false, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, true)));
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, false, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, true)));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        assertThat(actualTableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
+        Iterator<IndexMetaData> indexesIterator = actualTableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoaderTest.java
index e0b9db5504f..91ae8b2e391 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/MySQLSchemaMetaDataLoaderTest.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -115,16 +114,16 @@ public final class MySQLSchemaMetaDataLoaderTest {
     
     private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
         assertThat(schemaMetaDataList.size(), is(1));
-        assertTrue(schemaMetaDataList.iterator().next().getTables().containsKey("tbl"));
-        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().get("tbl");
+        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().iterator().next();
         assertThat(actualTableMetaData.getColumns().size(), is(5));
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, true, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(2)), is(new ColumnMetaData("doc", -1, false, false, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(3)), is(new ColumnMetaData("geo", -2, false, false, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(4)), is(new ColumnMetaData("t_year", 91, false, false, false)));
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, true, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("doc", -1, false, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("geo", -2, false, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("t_year", 91, false, false, false)));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        assertThat(actualTableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
+        Iterator<IndexMetaData> indexesIterator = actualTableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
index 6a1625b1111..bd4535ea797 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -83,10 +82,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, false, true, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, false, true, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -102,10 +101,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(1);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, false, true, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, false, true, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -121,10 +120,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, false, false, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, false, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -140,10 +139,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, true, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, true, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -159,10 +158,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(1);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, true, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, true, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -178,10 +177,10 @@ public final class OracleSchemaMetaDataLoaderTest {
         when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
         Collection<SchemaMetaData> actual = getDialectTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"), "sharding_db");
         assertTableMetaDataMap(actual);
-        TableMetaData actualTableMetaData = actual.iterator().next().getTables().get("tbl");
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, false, false)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        TableMetaData actualTableMetaData = actual.iterator().next().getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
     }
     
     private DataSource mockDataSource() throws SQLException {
@@ -234,10 +233,10 @@ public final class OracleSchemaMetaDataLoaderTest {
     
     private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
         assertThat(schemaMetaDataList.size(), is(1));
-        assertTrue(schemaMetaDataList.iterator().next().getTables().containsKey("tbl"));
-        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().get("tbl");
+        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().iterator().next();
         assertThat(actualTableMetaData.getColumns().size(), is(3));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        assertThat(actualTableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
+        Iterator<IndexMetaData> indexesIterator = actualTableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoaderTest.java
index fa30c762c97..588a5277889 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/PostgreSQLSchemaMetaDataLoaderTest.java
@@ -18,22 +18,21 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -161,13 +160,13 @@ public final class PostgreSQLSchemaMetaDataLoaderTest {
     
     private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
         assertThat(schemaMetaDataList.size(), is(1));
-        assertTrue(schemaMetaDataList.iterator().next().getTables().containsKey("tbl"));
-        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().get("tbl");
+        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().iterator().next();
         assertThat(actualTableMetaData.getColumns().size(), is(2));
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", Types.INTEGER, true, true, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", Types.VARCHAR, false, false, true)));
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", Types.INTEGER, true, true, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", Types.VARCHAR, false, false, true)));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        assertThat(actualTableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
+        Iterator<IndexMetaData> indexesIterator = actualTableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoaderTest.java
index 480240f3da0..3d60cc4c7b4 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/SQLServerSchemaMetaDataLoaderTest.java
@@ -18,21 +18,20 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.loader.dialect;
 
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
 import org.junit.Test;
 
 import javax.sql.DataSource;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -126,13 +125,13 @@ public final class SQLServerSchemaMetaDataLoaderTest {
     
     private void assertTableMetaDataMap(final Collection<SchemaMetaData> schemaMetaDataList) {
         assertThat(schemaMetaDataList.size(), is(1));
-        assertTrue(schemaMetaDataList.iterator().next().getTables().containsKey("tbl"));
-        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().get("tbl");
+        TableMetaData actualTableMetaData = schemaMetaDataList.iterator().next().getTables().iterator().next();
         assertThat(actualTableMetaData.getColumns().size(), is(2));
-        List<String> actualColumnNames = new ArrayList<>(actualTableMetaData.getColumns().keySet());
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, false, true, true)));
-        assertThat(actualTableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
+        Iterator<ColumnMetaData> columnsIterator = actualTableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, false, true, true)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
-        assertThat(actualTableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
+        Iterator<IndexMetaData> indexesIterator = actualTableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/TableMetaDataTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/TableMetaDataTest.java
index d120979672b..47ff5a8a701 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/TableMetaDataTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/TableMetaDataTest.java
@@ -23,7 +23,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.Types;
-import java.util.ArrayList;
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -42,17 +41,11 @@ public final class TableMetaDataTest {
     
     @Test
     public void assertGetColumnMetaData() {
-        ColumnMetaData actual = tableMetaData.getColumns().get(new ArrayList<>(tableMetaData.getColumns().keySet()).get(0));
+        ColumnMetaData actual = tableMetaData.getColumns().iterator().next();
         assertThat(actual.getName(), is("test"));
         assertThat(actual.getDataType(), is(Types.INTEGER));
         assertTrue(actual.isPrimaryKey());
         assertFalse(actual.isGenerated());
         assertTrue(actual.isCaseSensitive());
     }
-    
-    @Test
-    public void assertEmptyColumnsWithDefaultConstructor() {
-        tableMetaData = new TableMetaData();
-        assertThat(tableMetaData.getColumns(), is(Collections.emptyMap()));
-    }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilTest.java
index 028054c4d87..6dbfee84b46 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilTest.java
@@ -44,12 +44,12 @@ import static org.mockito.Mockito.when;
 public final class SchemaMetaDataUtilTest {
     
     @Test
-    public void assertGetSchemaMetaDataLoadMaterialsWhenConfigCheckMetaDataEnable() {
+    public void assertGetSchemaMetaDataLoaderMaterialsWhenConfigCheckMetaDataEnable() {
         DataNodeContainedRule dataNodeContainedRule = mock(DataNodeContainedRule.class);
         when(dataNodeContainedRule.getDataNodesByTableName("t_order")).thenReturn(mockShardingDataNodes());
         GenericSchemaBuilderMaterials materials = new GenericSchemaBuilderMaterials(mock(DatabaseType.class), mock(DatabaseType.class), mockDataSourceMap(),
                 Arrays.asList(dataNodeContainedRule, mock(DataSourceContainedRule.class)), mock(ConfigurationProperties.class), "sharding_db");
-        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoadMaterials(Collections.singleton("t_order"), materials, true);
+        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoaderMaterials(Collections.singleton("t_order"), materials, true);
         assertThat(actual.size(), is(2));
         Iterator<SchemaMetaDataLoaderMaterials> iterator = actual.iterator();
         SchemaMetaDataLoaderMaterials firstMaterial = iterator.next();
@@ -61,12 +61,12 @@ public final class SchemaMetaDataUtilTest {
     }
     
     @Test
-    public void assertGetSchemaMetaDataLoadMaterialsWhenNotConfigCheckMetaDataEnable() {
+    public void assertGetSchemaMetaDataLoaderMaterialsWhenNotConfigCheckMetaDataEnable() {
         DataNodeContainedRule dataNodeContainedRule = mock(DataNodeContainedRule.class);
         when(dataNodeContainedRule.getDataNodesByTableName("t_order")).thenReturn(mockShardingDataNodes());
         GenericSchemaBuilderMaterials materials = new GenericSchemaBuilderMaterials(mock(DatabaseType.class), mock(DatabaseType.class), mockDataSourceMap(),
                 Arrays.asList(dataNodeContainedRule, mock(DataSourceContainedRule.class)), mock(ConfigurationProperties.class), "sharding_db");
-        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoadMaterials(Collections.singleton("t_order"), materials, false);
+        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoaderMaterials(Collections.singleton("t_order"), materials, false);
         assertThat(actual.size(), is(1));
         Iterator<SchemaMetaDataLoaderMaterials> iterator = actual.iterator();
         SchemaMetaDataLoaderMaterials firstMaterial = iterator.next();
@@ -75,12 +75,12 @@ public final class SchemaMetaDataUtilTest {
     }
     
     @Test
-    public void assertGetSchemaMetaDataLoadMaterialsWhenNotConfigCheckMetaDataEnableForSingleTableDataNode() {
+    public void assertGetSchemaMetaDataLoaderMaterialsWhenNotConfigCheckMetaDataEnableForSingleTableDataNode() {
         DataNodeContainedRule dataNodeContainedRule = mock(DataNodeContainedRule.class);
         when(dataNodeContainedRule.getDataNodesByTableName("t_single")).thenReturn(mockSingleTableDataNodes());
         GenericSchemaBuilderMaterials materials = new GenericSchemaBuilderMaterials(mock(DatabaseType.class), mock(DatabaseType.class), mockDataSourceMap(),
                 Arrays.asList(dataNodeContainedRule, mock(DataSourceContainedRule.class)), mock(ConfigurationProperties.class), "public");
-        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoadMaterials(Collections.singleton("t_single"), materials, false);
+        Collection<SchemaMetaDataLoaderMaterials> actual = SchemaMetaDataUtil.getSchemaMetaDataLoaderMaterials(Collections.singleton("t_single"), materials, false);
         assertThat(actual.size(), is(1));
         Iterator<SchemaMetaDataLoaderMaterials> iterator = actual.iterator();
         SchemaMetaDataLoaderMaterials firstMaterial = iterator.next();
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
index 59c971a1b05..a5a150885ec 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataDecorator.java
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.singletable.rule.SingleTableRule;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
@@ -42,9 +43,9 @@ public final class SingleTableSchemaMetaDataDecorator implements RuleBasedSchema
     public Map<String, SchemaMetaData> decorate(final Map<String, SchemaMetaData> schemaMetaDataMap, final SingleTableRule rule, final GenericSchemaBuilderMaterials materials) {
         Map<String, SchemaMetaData> result = new LinkedHashMap<>();
         for (Entry<String, SchemaMetaData> entry : schemaMetaDataMap.entrySet()) {
-            Map<String, TableMetaData> tables = new LinkedHashMap<>(entry.getValue().getTables().size(), 1);
-            for (Entry<String, TableMetaData> tableEntry : entry.getValue().getTables().entrySet()) {
-                tables.put(tableEntry.getKey(), decorate(tableEntry.getKey(), tableEntry.getValue()));
+            Collection<TableMetaData> tables = new LinkedList<>();
+            for (TableMetaData each : entry.getValue().getTables()) {
+                tables.add(decorate(each.getName(), each));
             }
             result.put(entry.getKey(), new SchemaMetaData(entry.getKey(), tables));
         }
@@ -52,16 +53,16 @@ public final class SingleTableSchemaMetaDataDecorator implements RuleBasedSchema
     }
     
     private TableMetaData decorate(final String tableName, final TableMetaData tableMetaData) {
-        return new TableMetaData(tableName, tableMetaData.getColumns().values(), getIndex(tableMetaData), getConstraint(tableMetaData));
+        return new TableMetaData(tableName, tableMetaData.getColumns(), getIndex(tableMetaData), getConstraint(tableMetaData));
     }
     
     private Collection<IndexMetaData> getIndex(final TableMetaData tableMetaData) {
-        return tableMetaData.getIndexes().values().stream().map(each -> new IndexMetaData(IndexMetaDataUtil.getLogicIndexName(each.getName(), tableMetaData.getName()))).collect(Collectors.toList());
+        return tableMetaData.getIndexes().stream().map(each -> new IndexMetaData(IndexMetaDataUtil.getLogicIndexName(each.getName(), tableMetaData.getName()))).collect(Collectors.toList());
     }
     
     private Collection<ConstraintMetaData> getConstraint(final TableMetaData tableMetaData) {
-        return tableMetaData.getConstrains().values().stream()
-                .map(each -> new ConstraintMetaData(IndexMetaDataUtil.getLogicIndexName(each.getName(), tableMetaData.getName()), each.getReferencedTableName())).collect(Collectors.toList());
+        return tableMetaData.getConstrains().stream().map(each -> new ConstraintMetaData(
+                IndexMetaDataUtil.getLogicIndexName(each.getName(), tableMetaData.getName()), each.getReferencedTableName())).collect(Collectors.toList());
     }
     
     @Override
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
index d5874aca814..22e6feca3d4 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaMetaDataBuilderTest.java
@@ -27,12 +27,11 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.singletable.rule.SingleTableRule;
 import org.junit.Test;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -49,14 +48,15 @@ public final class SingleTableSchemaMetaDataBuilderTest {
         Collection<ShardingSphereRule> rules = Collections.singletonList(singleTableRule);
         SingleTableSchemaMetaDataDecorator builder = (SingleTableSchemaMetaDataDecorator) RuleBasedSchemaMetaDataDecoratorFactory.getInstances(rules).get(singleTableRule);
         Map<String, SchemaMetaData> schemaMetaDataMap = mockSchemaMetaDataMap();
-        TableMetaData tableMetaData = builder.decorate(schemaMetaDataMap, singleTableRule, mock(GenericSchemaBuilderMaterials.class)).get("sharding_db").getTables().get(TABLE_NAME);
-        List<String> actualColumnNames = new ArrayList<>(tableMetaData.getColumns().keySet());
-        assertThat(tableMetaData.getColumns().get(actualColumnNames.get(0)), is(new ColumnMetaData("id", 4, true, false, false)));
-        assertThat(tableMetaData.getColumns().get(actualColumnNames.get(1)), is(new ColumnMetaData("name", 12, false, false, false)));
-        assertThat(tableMetaData.getColumns().get(actualColumnNames.get(2)), is(new ColumnMetaData("doc", -1, false, false, false)));
+        TableMetaData tableMetaData = builder.decorate(schemaMetaDataMap, singleTableRule, mock(GenericSchemaBuilderMaterials.class)).get("sharding_db").getTables().iterator().next();
+        Iterator<ColumnMetaData> columnsIterator = tableMetaData.getColumns().iterator();
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4, true, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12, false, false, false)));
+        assertThat(columnsIterator.next(), is(new ColumnMetaData("doc", -1, false, false, false)));
         assertThat(tableMetaData.getIndexes().size(), is(2));
-        assertThat(tableMetaData.getIndexes().get("id"), is(new IndexMetaData("id")));
-        assertThat(tableMetaData.getIndexes().get("idx_name"), is(new IndexMetaData("idx_name")));
+        Iterator<IndexMetaData> indexesIterator = tableMetaData.getIndexes().iterator();
+        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
+        assertThat(indexesIterator.next(), is(new IndexMetaData("idx_name")));
     }
     
     private Map<String, SchemaMetaData> mockSchemaMetaDataMap() {
@@ -64,8 +64,8 @@ public final class SingleTableSchemaMetaDataBuilderTest {
                 new ColumnMetaData("name", 12, false, false, false),
                 new ColumnMetaData("doc", -1, false, false, false));
         Collection<IndexMetaData> indexMetaDataList = Arrays.asList(new IndexMetaData("id_" + TABLE_NAME), new IndexMetaData("idx_name_" + TABLE_NAME));
-        Map<String, TableMetaData> tableMetaDataMap = new LinkedHashMap<>();
-        tableMetaDataMap.put(TABLE_NAME, new TableMetaData(TABLE_NAME, columns, indexMetaDataList, Collections.emptyList()));
-        return Collections.singletonMap("sharding_db", new SchemaMetaData("sharding_db", tableMetaDataMap));
+        Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
+        tableMetaDataList.add(new TableMetaData(TABLE_NAME, columns, indexMetaDataList, Collections.emptyList()));
+        return Collections.singletonMap("sharding_db", new SchemaMetaData("sharding_db", tableMetaDataList));
     }
 }