Mycat1.6 SQL支持

1. DDL 语句

语句支持状态说明
CREATE TABLE支持需要手动在每个分片节点执行
ALTER TABLE支持需要手动在每个分片节点执行
DROP TABLE支持需要手动在每个分片节点执行
CREATE INDEX支持需要手动在每个分片节点执行
TRUNCATE TABLE支持通过ER关系支持

2. DML 语句

语句支持状态说明
INSERT支持根据分片键路由到对应节点
INSERT 批量支持自动拆分到各个节点
UPDATE支持带分片键可精确路由
DELETE支持带分片键可精确路由
SELECT支持支持跨分片查询,自动合并结果

3. SELECT 细化支持

特性支持状态
WHERE 条件支持
ORDER BY支持(内存排序)
GROUP BY支持
HAVING支持
LIMIT支持
分页 OFFSET支持(内存处理)
聚合函数 COUNT/SUM/AVG/MAX/MIN支持
DISTINCT支持
子查询(SELECT 中)部分支持
INNER JOIN支持(不超过2表)
LEFT JOIN有限支持
表别名 ALIAS支持
UNION / UNION ALL支持

4. 事务支持

# 支持的事务类型

# 1. Proxy 事务(默认)
-- 单节点事务,自动提交/回滚
BEGIN;
INSERT INTO ... ;
COMMIT;

# 2. XA 分布式事务
set autocommit=0;
set xa = on;
-- 支持跨节点的分布式事务
INSERT INTO db1.t1 VALUES(...);
INSERT INTO db2.t2 VALUES(...);
commit;

5. 跨分片查询

5.1 带分片键查询(最优)

-- 精确路由到单个节点
SELECT * FROM travelrecord WHERE id = 100;

5.2 不带分片键查询

-- 需要广播到所有节点,合并结果
SELECT * FROM travelrecord WHERE user_name = 'john';
-- 自动添加 LIMIT 100 (sqlMaxLimit)

5.3 分页查询注意事项

# 低效分页:
SELECT * FROM t WHERE ... LIMIT 100000,10;
# Mycat需从各节点取100010条,内存排序,性能较差

# 优化方案: 使用分片键范围 + 游标
SELECT * FROM t WHERE id > last_id LIMIT 10;

6. 不支持的SQL特性

特性说明
存储过程不支持跨分片存储过程
自定义函数(UDF)不支持
触发器不支持
外键约束不支持
视图不支持
全文索引不支持
SAVEPOINT不支持
复杂的多表JOIN有限支持
重要: 跨分片查询应尽量避免大结果集。建议在应用层做好分页控制,避免Mycat内存溢出。
最佳实践: 业务SQL尽量带分片键条件,可以确保精确路由到单个节点,获得最优性能。