Gaea icon indicating copy to clipboard operation
Gaea copied to clipboard

分库分表场景下,不支持跨分片insert,支持跨分片update和delete,这样是否合理?辛苦指导

Open ximenluffy opened this issue 2 years ago • 0 comments

//跨分片insert报错 mysql> insert into sbtest(id,k,c,pad) values(101,101,'aaa','aaa'),(102,102,'aaa','aaa'),(103,103,'aaa','aaa'),(104,104,'aaa','aaa'),(105,105,'aaa','aaa'); ERROR 1105 (HY000): unknown error: get plan error, db: dba_shard_test, sql: insert into sbtest(id,k,c,pad) values(101,101,'aaa','aaa'),(102,102,'aaa','aaa'),(103,103,'aaa','aaa'),(104,104,'aaa','aaa'),(105,105,'aaa','aaa'), err: create select plan error: handleInsertValues error: batch insert has cross slice values or no route found

// 但是支持跨分片update和delete mysql> update sbtest set c='ccc' where k in (101,102,103,104,105); Query OK, 5 rows affected (0.00 sec)

mysql> explain update sbtest set c='ddd' where k in (101,102,103,104,105); +-------+---------+------------------+------------------------------------------------------+ | type | slice | db | sql | +-------+---------+------------------+------------------------------------------------------+ | shard | slice-0 | dba_shard_test_0 | UPDATE sbtest SET c='ddd' WHERE k IN (101,104) | | shard | slice-0 | dba_shard_test_1 | UPDATE sbtest SET c='ddd' WHERE k IN (102,103) | | shard | slice-1 | dba_shard_test_3 | UPDATE sbtest SET c='ddd' WHERE k IN (105) | +-------+---------+------------------+------------------------------------------------------+ 3 rows in set (0.00 sec)

mysql> delete from sbtest where k in (101,102,103,104,105); Query OK, 5 rows affected (0.00 sec)

mysql> explain delete from sbtest where k in (101,102,103,104,105); +-------+---------+------------------+---------------------------------------------+ | type | slice | db | sql | +-------+---------+------------------+---------------------------------------------+ | shard | slice-1 | dba_shard_test_3 | DELETE FROM sbtest WHERE k IN (105) | | shard | slice-0 | dba_shard_test_1 | DELETE FROM sbtest WHERE k IN (102,103) | | shard | slice-0 | dba_shard_test_0 | DELETE FROM sbtest WHERE k IN (101,104) | +-------+---------+------------------+---------------------------------------------+ 3 rows in set (0.00 sec)

ximenluffy avatar Jun 15 '22 03:06 ximenluffy