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循環查詢