背景
虽然ShardingSphere希望能够完全兼容所有的SQL以及单机数据库,但分布式为数据库带来了更加复杂的场景。ShardingSphere希望能够优先解决海量数据OLTP的问题,OLAP的相关支持,会一点一点的逐渐完善。
请进一步阅读ShardingSphere所支持和不支持的SQL类型以及针对分页这类性能相关度很高的问题。
由于SQL语法灵活复杂,分布式数据库和单机数据库的查询场景又不完全相同,难免有和单机数据库不兼容的SQL出现。
本文详细罗列出已明确可支持的SQL种类以及已明确不支持的SQL种类,尽量让使用者避免踩坑。
其中必然有未涉及到的SQL欢迎补充,未支持的SQL也尽量会在未来的版本中支持。
支持项
路由至单数据节点
100%全兼容(目前仅MySQL,其他数据库完善中)。
路由至多数据节点
全面支持DML、DDL、DCL、TCL和部分DAL。支持分页、去重、排序、分组、聚合、关联查询(不支持跨库关联)。以下用最为复杂的DML举例:
SELECT主语句
select_expr
table_reference
不支持项
路由至多数据节点
不支持CASE WHEN、HAVING、UNION (ALL),有限支持子查询。
除了分页子查询的支持之外(详情请参考分页),也支持同等模式的子查询。无论嵌套多少层,ShardingSphere都可以解析至第一个包含数据表的子查询,一旦在下层嵌套中再次找到包含数据表的子查询将直接抛出解析异常。
例如,以下子查询可以支持:
以下子查询不支持:
简单来说,通过子查