diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
index 11e8e9487896d..8a614a452f0b3 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
@@ -72,7 +72,7 @@ public static Collection<ShardingSphereRule> build(final String databaseName, fi
     }
     
     /**
-     * Build database rules.
+     * Build database rule.
      *
      * @param databaseName database name
      * @param protocolType protocol type
@@ -80,22 +80,17 @@ public static Collection<ShardingSphereRule> build(final String databaseName, fi
      * @param ruleConfig rule configuration
      * @param computeNodeInstanceContext compute node instance context
      * @param resourceMetaData  resource meta data
-     * @return built rules
+     * @return built rule
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
-    public static Collection<ShardingSphereRule> build(final String databaseName, final DatabaseType protocolType, final Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig,
-                                                       final ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData resourceMetaData) {
-        Collection<ShardingSphereRule> result = new LinkedList<>();
-        for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry : OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
-                Collections.singletonList(ruleConfig), Comparator.reverseOrder()).entrySet()) {
-            RuleConfigurationChecker configChecker = OrderedSPILoader.getServicesByClass(
-                    RuleConfigurationChecker.class, Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass());
-            if (null != configChecker) {
-                configChecker.check(databaseName, entry.getKey(), resourceMetaData.getDataSourceMap(), rules);
-            }
-            result.add(entry.getValue().build(entry.getKey(), databaseName, protocolType, resourceMetaData, rules, computeNodeInstanceContext));
+    public static ShardingSphereRule build(final String databaseName, final DatabaseType protocolType, final Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig,
+                                           final ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData resourceMetaData) {
+        DatabaseRuleBuilder databaseRuleBuilder = OrderedSPILoader.getServices(DatabaseRuleBuilder.class, Collections.singleton(ruleConfig)).get(ruleConfig);
+        RuleConfigurationChecker configChecker = OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class, Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass());
+        if (null != configChecker) {
+            configChecker.check(databaseName, ruleConfig, resourceMetaData.getDataSourceMap(), rules);
         }
-        return result;
+        return databaseRuleBuilder.build(ruleConfig, databaseName, protocolType, resourceMetaData, rules, computeNodeInstanceContext);
     }
     
     @SuppressWarnings("rawtypes")
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index bbc6040c32b67..8c252fd25e5b5 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -66,9 +66,8 @@ public synchronized void alterRuleConfiguration(final String databaseName, final
             return;
         }
         rules.removeIf(each -> each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
-        rules.addAll(DatabaseRulesBuilder.build(
-                databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData()));
-        refreshMetadata(databaseName, getRuleConfigurations(rules));
+        rules.add(DatabaseRulesBuilder.build(databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData()));
+        refreshMetadata(databaseName, rules);
     }
     
     /**
@@ -89,17 +88,14 @@ public synchronized void dropRuleConfiguration(final String databaseName, final
         }
         rules.removeIf(each -> each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
         if (!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, ruleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) ruleConfig)) {
-            rules.addAll(DatabaseRulesBuilder.build(
+            rules.add(DatabaseRulesBuilder.build(
                     databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData()));
         }
-        refreshMetadata(databaseName, getRuleConfigurations(rules));
+        refreshMetadata(databaseName, rules);
     }
     
-    private void refreshMetadata(final String databaseName, final Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
-        metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigurations, metaDataContexts));
-    }
-    
-    private Collection<RuleConfiguration> getRuleConfigurations(final Collection<ShardingSphereRule> rules) {
-        return rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList());
+    private void refreshMetadata(final String databaseName, final Collection<ShardingSphereRule> rules) throws SQLException {
+        Collection<RuleConfiguration> ruleConfigs = rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList());
+        metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigs, metaDataContexts));
     }
 }