首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemSQL中的动态SQL

MemSQL中的动态SQL
EN

Stack Overflow用户
提问于 2015-12-09 20:00:36
回答 1查看 418关注 0票数 0

我们正在考虑使用MemSQL来提供针对我们的数据的筛选功能。筛选操作可以有任意数量的标准--最有可能使用Oracle或MySQL中的"Dynamic“来解决的需求类型。

这种类型的任意筛选会对MemSQL造成问题吗?来自MemSQL的这个常见问题建议编译查询需要时间。这是否意味着每次MemSQL看到一个新WHERE子句时,都必须编译一个新的C++片段?如果是的话,该汇编会造成多长时间的延迟?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 20:27:24

这是正确的,正如FAQ每个新WHERE子句中所描述的那样,将需要查询编译,除非唯一的区别是参数的值。(这是因为我们根据where子句中可用的过滤器编译和优化计划。)因此,如果您添加了一个新的筛选器,这将需要另一个编译。在memsql的当前版本中,对select查询的编译可能需要1s或更多,这取决于查询。

避免这种情况的一个解决办法是,如果您事先知道您感兴趣的所有可能的标准,那么编写一个WHERE子句如下:

代码语言:javascript
复制
WHERE (a=1 OR 0) AND (b<5 OR 0) AND (c=3 OR 0)

这相当于

代码语言:javascript
复制
WHERE (a=1) AND (b<5) AND (c=3)

当然,这些过滤器可以是任意表达式。通过将OR 0更改为OR 1,可以忽略该条件,例如,要获得b<5,就需要编写

代码语言:javascript
复制
WHERE (a=1 OR 1) AND (b<5 OR 0) AND (c=3 OR 1)

这不需要额外的编译,因为只有参数正在改变。但是,请注意,它可能不能很好地执行,因为编译后的查询计划必须在运行时检查每个子句(这就是如何避免重新编译),而且根据实际存在的筛选器,最佳计划可能有所不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34187927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档