Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
eda72045
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
eda72045
编写于
7月 27, 2017
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs
上级
63474865
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
0 deletion
+36
-0
sharding-jdbc-doc/content/01-start/faq.md
sharding-jdbc-doc/content/01-start/faq.md
+36
-0
未找到文件。
sharding-jdbc-doc/content/01-start/faq.md
浏览文件 @
eda72045
...
...
@@ -66,6 +66,8 @@ PS:sourceforge网站需要翻墙访问。
### 7. 使用SQLSever和PostgreSQL时,聚合列不加别名会抛异常?
回答:
SQLServer和PostgreSQL获取不加别名的聚合列会改名。例如,如下SQL:
```
sql
...
...
@@ -79,3 +81,37 @@ SQLServer获取到的列为空字符串和(2),PostgreSQL获取到的列为空s
```
sql
SELECT
SUM
(
num
)
AS
sum_num
,
SUM
(
num2
)
AS
sum_num2
FROM
table_xxx
;
```
### 8. 1.5.x之前支持OR,1.5.x之后不再支持,是什么原因?
回答:
1.
5.x之前对OR支持并不完善,在复杂场景会有问题。OR的复杂度不仅在于解析,更在于路由。而且非常不适合在分布式数据库中使用,会极大的影响性能。OR是需要将OR和AND的组合拆解成全AND,才可以真正的执行SQL。
举例说明:
```
sql
WHERE
(
a
=?
OR
b
=?
)
AND
c
=?
```
必须拆解为
```
sql
WHERE
a
=?
AND
c
=?
WHERE
b
=?
AND
c
=?
```
两条语句才能执行。
再举一个具体的例子:
```
sql
WHERE
id
=
1
OR
status
=
‘
OK
’
```
这样的SQL,如果id是分片键,应该如何处理呢?
首先,需要路由到id=1的库或表,单表获取即可。
其次,因为有OR,需要在所有的数据库和表中全路由,取出所有的status=‘OK’的数据。
最后,将两种数据归并。
因此,SQL必须拆为两条,一条为WHERE id=1,另一条为status=‘OK’,而且他们的分片路由方式截然不同。
如果考虑到很多OR和AND的组合就更加复杂,必须组成一个多维递归的树结构。这种性能对于分布式数据库无法接受,也不可控,因此Sharding-JDBC选择不对OR进行支持。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录