我应该选择哪个 DBMS 来使用 Java 重新排序查询执行计划?
Posted
技术标签:
【中文标题】我应该选择哪个 DBMS 来使用 Java 重新排序查询执行计划?【英文标题】:Which DBMS should i choose for reordering query execution plan using Java? 【发布时间】:2014-02-05 12:54:24 【问题描述】:我正在启动一个研究项目,该项目涉及评估查询执行计划的每个分支的执行成本,并在给定大数据集的情况下,程序将重新编写查询执行计划,以便可以在特定时间范围内执行查询。
我有使用 java 和 oracle 的经验,但我没有使用 NoSql 数据库的经验,我确实有很多我最初阅读的 Pig、Casandara、CouchDB 的选择。 我的问题如下:
-
我可以使用 JDBC 在 oracle 中重新排序查询执行计划吗?
做这种项目的最佳选择是什么(可能是最
支持 DBMS)?
【问题讨论】:
【参考方案1】:查询执行计划是 DBMS 逻辑的一部分,用于执行您的声明式 SQL 愿望。 当您针对 SQL Server 抛出 SQL 查询时,有一个阶段您的查询会被“优化”以运行底层函数(哪个和何时)。 SQL 只是让 DBMS 知道你想要什么的一种方式。 我从您的问题中了解到,您希望有一个工具来“预”优化您的查询。 Qracle 和 DB2 有一些简洁的工具可以做到这一点,无论是在生产中,分析传入的查询,还是在之前,使用供应商提供的工具。
由于 SQL 是一种声明式愿望,您可以通过最小化要查找的数据量来优化查询。使用 Oracle 中的 with
语句仅处理 DB2 中的一部分或子查询语句。不要在 mysql 中使用子查询。避免在 postgreSQL 中使用很多 and 语句,改用in
。
由于查询执行计划是您使用的 DBMS 的一部分,因此您必须先为您的 DBMS 买一杯饮料,然后才能获得所有的狂野和优化;)
【讨论】:
【参考方案2】:我认为没有像 Oracle Hints for NoSql 查询这样的东西。此外(至少 MongoDB)不支持连接,因此优化查询的空间要少得多,因为它们总是作用于单个集合。
例如什么MongoDb 支持对属性进行索引以基于它们优化搜索查询。但是,当您需要某种 Join 时,您将触发两个请求。
也许还值得看看 mongos Aggregation 机制。那就是您可以在服务器端处理聚合的地方(仍然仅在单个集合上)。但即使在那里,在查询到达数据库之前,我也没有多少空间可以优化查询。
explain operator 提供了有关调试和优化 mongoDB 查询的更多信息。
更多关于optimizing MongoDB
【讨论】:
以上是关于我应该选择哪个 DBMS 来使用 Java 重新排序查询执行计划?的主要内容,如果未能解决你的问题,请参考以下文章