ShardingSphere 針對SQL IN語法問題小記

ShardingSphere支持IN語法查詢,但也存在問題。

官網說明:https://shardingsphere.apache.org/document/current/cn/features/sharding/concept/sharding/

當查詢多條數據時,入參爲分片鍵,進行測試

  • 當數據路由都在一個庫同一張表時,會去相應表進行查詢(分片鍵:1504, 1508)
2020-05-26 22:05:01.331  INFO 6476 --- [nio-8080-exec-8] ShardingSphere-SQL    :
Logic SQL: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
           type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
       	   FROM art_article WHERE enabled = 1 AND id IN(   ? ,  ? )

2020-05-26 22:05:01.332  INFO 16076 --- [nio-8080-exec-2] ShardingSphere-SQL    : 
Actual SQL: 
article0 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_0 WHERE enabled = 1 AND id IN (   ? , ? ) ::: [1504, 1508]

  • 當數據路由在同一個庫不同表時,會去相應表進行查詢 (分片鍵:1504, 1507)
2020-05-27 09:02:32.336  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL   : 
Logic SQL:  SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
            type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
        	FROM art_article WHERE enabled = 1 AND id IN (   ? ,  ? )

2020-05-27 09:02:32.337  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL   : 
Actual SQL: 
article0 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type, 		  
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_0 WHERE enabled = 1 AND id IN (   ? ,  ? ) ::: [1504, 1507]
2020-05-27 09:02:32.337  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL     : 
Actual SQL: 
article1 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
           	 FROM art_article_0  WHERE enabled = 1 AND id IN (   ? ,  ? ) ::: [1504, 1507]
  • 當數據路由在不同庫的相同表號時,會去相應表進行查詢(分片鍵:1504, 1506)
2020-05-27 09:01:17.559  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL   : 
Logic SQL:  SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
            type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
        	FROM art_article WHERE enabled = 1 AND id IN (   ? ,  ? )

2020-05-27 09:01:17.560  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL   : 
Actual SQL: 
article0 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type, 		  
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_0 WHERE enabled = 1 AND id IN (   ? ,  ? ) ::: [1504, 1506]
2020-05-27 09:01:17.560  INFO 10660 --- [nio-8080-exec-5] ShardingSphere-SQL     : 
Actual SQL: 
article1 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
           	 FROM art_article_0  WHERE enabled = 1 AND id IN (   ? ,  ? ) ::: [1504, 1506]
  • 當數據路由跨庫時,且表號不同時,會輪詢所有庫的所有表進行查詢(分片鍵:1504, 1505)
2020-05-26 22:05:01.331  INFO 6476 --- [nio-8080-exec-8] ShardingSphere-SQL  
Logic SQL: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
           type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
       	   FROM art_article WHERE enabled = 1 AND id IN(   ? ,  ? )

2020-05-26 22:05:01.332  INFO 16076 --- [nio-8080-exec-2] ShardingSphere-SQL                       : 
Actual SQL: 
article0 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_0 WHERE enabled = 1 AND id IN (   ? , ? ) ::: [1504, 1505]

Actual SQL: 
article0 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,      
    		 type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_1 WHERE enabled = 1 AND id IN (   ? , ? ) ::: [1504, 1505]

Actual SQL: 
article1 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_0 WHERE enabled = 1 AND id IN (   ? , ? ) ::: [1504, 1505]

Actual SQL: 
article1 ::: SELECT id, last_depot_id, current_depot_id, sku_id, entry_bill_id, entry_time, stock_status, entry_type,
             type, created_by, created_time, last_modified_by, last_modified_time, remarks, enabled, version, tenant_id
             FROM art_article_1 WHERE enabled = 1 AND id IN (   ? , ?) ::: [1504, 1505]

對於少量的批量查詢可以考慮for循環查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章