问题标签 [cbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
135033 浏览

sql - PostgreSQL - 获取列的最大值的行

我正在处理一个 Postgres 表(称为“lives”),其中包含带有 time_stamp、usr_id、transaction_id 和 live_remaining 列的记录。我需要一个查询,该查询将为我提供每个 usr_id 的最新 lives_remaining 总数

  1. 有多个用户(不同的 usr_id)
  2. time_stamp 不是唯一标识符:有时用户事件(在表中逐行)会以相同的 time_stamp 发生。
  3. trans_id 仅在非常小的时间范围内是唯一的:随着时间的推移它会重复
  4. 剩余寿命(对于给定用户)可以随时间增加和减少

例子:

因为我需要使用每个给定 usr_id 的最新数据访问行的其他列,所以我需要一个查询,它会给出如下结果:

如前所述,每个 usr_id 都可能获得或失去生命,有时这些带时间戳的事件发生得如此接近以至于它们具有相同的时间戳!因此,此查询将不起作用:

相反,我需要同时使用 time_stamp(第一)和 trans_id(第二)来识别正确的行。然后,我还需要将该信息从子查询传递到主查询,主查询将为相应行的其他列提供数据。这是我已经开始工作的黑客查询:

好的,所以这行得通,但我不喜欢它。它需要一个查询中的一个查询,一个自连接,在我看来,通过抓取 MAX 发现具有最大时间戳和 trans_id 的行可以更简单。表“lives”有数千万行要解析,所以我希望这个查询尽可能快速和高效。我尤其是 RDBM 和 Postgres 的新手,所以我知道我需要有效地使用正确的索引。我对如何优化有点迷茫。

我在这里找到了类似的讨论。我可以执行某种与 Oracle 分析功能等效的 Postgres 类型吗?

任何有关访问聚合函数(如 MAX)使用的相关列信息、创建索引和创建更好的查询的建议将不胜感激!

PS您可以使用以下内容创建我的示例案例:

0 投票
5 回答
20399 浏览

mysql - 改善这个缓慢的 mysql 查询的技巧?

我使用的查询通常在一秒钟内执行,但有时需要 10-40 秒才能完成。我实际上并不完全清楚子查询是如何工作的,我只知道它可以工作,因为它为每个 faverprofileid 提供了 15 行。

我正在记录慢速查询,它告诉我检查了 5823244 行,这很奇怪,因为在所涉及的任何表中都没有接近那么多行(收藏夹表最多有 50,000 行)。

谁能给我一些指示?这是子查询的问题并且需要使用文件排序吗?

编辑:运行解释表明用户表没有使用索引(即使 id 是主键)。在额外下它说:使用临时;使用文件排序。

0 投票
1 回答
3436 浏览

performance - 如何在没有提示的情况下增加哈希联接、分组依据和排序依据的 Oracle CBO 成本估算

似乎在我们拥有的某些服务器上,与实际成本相比,散列连接、分组依据和排序依据的成本太低了。即,索引范围扫描的执行计划通常优于前者,但在解释计划中,成本会更高。

一些进一步的说明:

  1. 我已经将optimizer_index_cost_adj设置为 20,但仍然不够好。我不想增加纯全表扫描的成本,事实上我不介意优化器降低成本。
  2. 我注意到pga_aggregate_target会对 CBO 成本估算产生影响,但我绝对不想降低这个参数,因为我们有足够的 RAM。
  3. 与在单个查询中使用优化器提示相反,我希望设置是全局的。

编辑 1:我正在考虑尝试动态采样,但我没有足够的知识来预测这会如何影响整体性能,即执行计划的更改频率。我肯定更喜欢非常稳定的东西,事实上,对于我们一些最大的客户,我们有一个锁定所有统计数据的策略(这将随着 Oracle 11g SQL 计划管理而改变)。

0 投票
3 回答
1027 浏览

sql - 带有 NULL 的 CBO 索引修复的 Oracle MAX() 错误导致索引限制

2011 年 1 月 31 日更新

我想我正在违反数据库限制。GROUP BY 表达式
和所有非可区分聚合函数可能已超出单个
数据库块。
请参阅http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits003.htm

原帖:

这是在 Oracle 数据库 10g 企业版版本 10.2.0.1.0 - 产品上。


如果我有两条 matchKey 相同的记录,一条
具有 contributionP NULL 值,另一条具有非 NULL 值,则以下插入不会返回真正的 MAX() 值。
有时,MAX() 返回的值是 NULL 值。

如果我按如下方式构建索引并给出 CBO 提示

这使 MAX() 行为正确。

我需要添加 15 个额外的列并更改索引

小问题

给出
ORA-01793: 最大索引列数为 32

首先 MAX() 不适用于大型列集,其次,索引+CBO 补丁
会导致索引限制。

有什么建议么?

0 投票
1 回答
558 浏览

sql - 在 oracle 查询中添加“distinct”关键字会无缘无故地消除查询性能

我对在 Oracle 10 数据库中看到的东西感到非常困惑。

我有以下查询。

对我来说,这似乎并没有什么特别之处,以下是来自 autotrace 的基线性能数据:

CR_GETS:318

中央处理器:3

行数:33173

现在,如果我将“DISTINCT”关键字添加到查询中(例如“选择不同的 t2.duplicate_num ...”),就会发生这种情况

CR_GETS:152921

中央处理器:205

行数:305

查询计划没有改变,但逻辑 IO 增长了 500 倍。我原以为 CPU 只会上升,而逻辑 IO 基本没有变化。

最终结果是使用 distinct 关键字运行速度慢 10-100 倍的查询。我可以将代码放入应用程序中,这将使结果集在很短的时间内变得不同。这有什么意义?特别是在查询计划没有改变的情况下?

0 投票
1 回答
516 浏览

java - 在 Java 中计算传出耦合

我需要从源文件中计算 Java 程序的传出耦合(对象之间的耦合)。

我已经在 Eclipse 中使用 jdt 提取抽象语法树,但我不确定是否可以直接从另一个类中提取类依赖项。

我不能使用任何公制插件。

谢谢你的帮助。

0 投票
1 回答
929 浏览

oracle - Oracle 在 where 子句中添加条件会减慢查询速度

在基于几个表生成报告时,其中一些非常大(1+ 十亿条记录),一些非常小(100 条记录),这需要 17 分钟。但是我在 where 子句中添加了一个条件,它开始运行 1 个多小时。

table1 有 1+ 十亿条记录,添加的条件是“and line_ind in ('Y', '*')”。问题是当 CBO 可以从连接的结果集中进行搜索时,为什么要进行全表扫描。有序提示似乎没有帮助,所以想知道如何让这个选择运行得更快。?

这是表的记录数

解释计划

0 投票
0 回答
27 浏览

oracle - Oracle Optimizer 没有采取同样的计划。SQL 开发与应用程序代码

我真的坚持这一点。我有一个 SQL,当我对其执行解释时,它显示执行速度非常快。

当应用程序运行 SQL 时,它需要另一个解释计划和一组非常昂贵的笛卡尔积

这是一个 Oracle 12C 数据库。

任何想法将不胜感激。

0 投票
1 回答
1892 浏览

hive - hive:CBO 未优化的计划

我正在 hive 中运行一个解释计划,它给了我以下错误。计划未由 CBO 优化。当我检查它说的日志时。

2016-03-14 00:37:12,082 信息 [HiveServer2-Handler-Pool: Thread-41]: parse.BaseSemanticAnalyzer (CalcitePlanner.java:canCBOHandleAst(392)) - 不调用 CBO,因为该语句的连接太少

这意味着什么?

0 投票
1 回答
506 浏览

java - 使用 BCEL 生成的已解析字节码确定对象之间的传出耦合(CBO 度量)

我已经构建了一个程序,它接收提供的“.class”文件并使用 BCEL 解析它,我现在已经学会了如何计算 LCOM4 值。现在我想知道如何计算类文件的 CBO(对象之间的耦合)值。我已经搜索了整个网络,试图找到一个合适的教程,但到目前为止我一直无法(我也阅读了关于 BCEL 的整个 javadoc 并且在 stackoverflow 上有一个类似的问题,但它一直是删除)。所以我想在这个问题上得到一些帮助,比如一些详细的教程或代码片段,可以帮助我理解如何去做。