问题标签 [sql-optimization]

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 投票
1 回答
296 浏览

sql - 在 oracle 中使用提示

我正在尝试对我的查询应用提示,但解释计划不会更改为正在使用的提示。

我的查询

解释计划

如您所见,我正在强制集群使用散列连接而不是嵌套循环。但是解释计划仍然显示它正在使用嵌套循环。

0 投票
2 回答
6528 浏览

oracle - oracle order by 运行速度非常慢

我正在做这样的查询,需要 6 秒才能完成:

我的表中有大约 160 万条记录,我尝试向已删除的列和已创建的列添加单独的索引,我尝试添加包含已创建和已删除列的索引,并尝试创建相同的索引以不同的顺序。似乎没有任何帮助。我能做些什么来加快速度?

我无法更改查询,因为它是由休眠生成的

编辑:即使没有aaa."DELETED" is null查询运行也很慢。

编辑2: 查询计划

编辑 3:添加我的索引定义。老实说,我不知道这些数字中的大多数是什么意思,我正在使用 sqldeveloper 创建索引。甚至不知道每个索引都有这么多配置选项,我现在将查看文档。

0 投票
1 回答
53 浏览

sql - 将动态表合并为一个查询

有没有一种干净的方法可以将下面的 SQL 组合成 1 条语句?FilterID 的长度可以为零,因此该Filters表是可选的。所以,除非有更好的方法,否则我“被迫”使用下面的 EXISTS 逻辑。

我已经意识到......
我已经意识到我可以构建一个动态字符串并使用它EXEC来运行它......但这很慢。

Document-to-DocumentMetadata 的关系是: 1 to DocumentmanyDocumentMetadataFilter-to-DocumentMetadata 的关系是:
1 to many的FilterDocumentMetadata

SQL如下:

0 投票
3 回答
839 浏览

mysql - 使用 OR 条件优化 DISTINCT SQL 查询

我有以下 SQL 查询:

我试图实现的是获取所有没有记录的唯一业务密钥 concept=case AND attrib=status AND value=closed。在 MySQL 中使用 500 000 条记录和所有唯一业务键运行此查询非常慢:大约 11 秒。

我将索引放置到 business_key 列、概念、属性和值列。我还尝试使用所有三列(概念、属性、值)的组合索引,但结果是相同的。

这是EXPLAIN EXTENDED命令的屏幕截图:

在此处输入图像描述

有趣的是,在没有 distinct 说明符的情况下运行查询会导致执行速度非常快。

我也试过这个:

更糟糕的结果:大约 25 秒

0 投票
2 回答
752 浏览

ms-access - 如何让 MS-Access 为我的查询选择不同/正确的执行计划

我对相对简单的查询和 Access 为其选择的执行计划有疑问。

查询是这种形式

C 和 D 的行数相对较少。A 和 B 有几千行。

返回 2 行的查询(不确定这是否相关)真的很慢。它在 17 秒内运行。如果我删除AND D.d = 2where 子句的一部分,查询现在返回 4 行并立即运行。

所以我的理解是,JET 引擎可以在没有过滤器的情况下立即在 Dd 上运行查询,然后立即执行所述过滤器(仅过滤 4 行)。D.d = 2因此,使用过滤器运行查询不应该太长。

我尝试创建一个没有过滤器的子查询,并将其包含在另一个只过滤结果的查询中,但它仍然很慢。我的猜测是 JET 引擎足够聪明,可以“扁平化”子查询,所以结果是一样的。

由于我无法按照我的意愿运行查询,因此我使用了 JETSHOWPLAN 东西,以便 Access 输出它的执行计划。这是我发现的:

对于快速查询(没有D.d = 2的查询),查询计划的第一步是A.primaryKey = 1在 A 表上应用过滤器。这导致超过 30000 行中的 1 行的数据集。然后连接似乎是使用索引从 A 到 D 执行的,数据集从不超过 4 行。

慢查询似乎以相反的顺序执行。D 和 C 先连接,然后D.d = 2进行测试。之后,执行从 C 到 A 的连接。通过这种方式,需要从 D 连接到 C、从 C 连接到 B 以及从 B 连接到 A 的数据要大得多。当所有的 JOIN 都被执行并且 beforeA.primaryKey=1被执行时,数据集将有 120K 行。

有没有办法可以在 Access 上强制执行正确的查询计划?

我希望我很清楚。让我知道是否应该发布查询计划。我没有,因为它们很大。

提前致谢,

mp

0 投票
4 回答
416 浏览

mysql - 在多对多相关表中进行高效搜索

我有两个通过第三个连接表多对多相关的表:products 和 categories。每个产品可以属于多个类别。这是典型的多对多关系:

我想让用户搜索产品,这些产品在某些选定的类别中,而不是同时在其他选定的类别中。

示例:查找属于“计算机”和“软件”类别但不在“游戏”、“编程”和“教育”类别中的所有产品。

这是我为此设计的查询:

有用。但它非常慢,以至于我无法在生产中使用它。所有索引都已就位,但此查询会产生 5 个相关子查询,并且表很大。

有没有办法在没有依赖子查询的情况下解决相同的任务或以其他方式优化此查询?

更新

索引是:

所有表都是 InnoDB

0 投票
2 回答
791 浏览

sql - 计算比率的sql查询优化

我有 2 个表(它只是此查询所需的表列的一部分):

对于每个 OwnerId,我需要计算比率函数的结果:链接到 ItemsRelationstable 的用户元素计数/所有用户元素的计数。

我写了这个查询,但它很慢而且不是最优的。有没有更简单快捷的方法来做到这一点?

0 投票
1 回答
132 浏览

mysql - MySQL:有什么方法可以将这些 N 个查询变成更少的查询?

我有一个整数列表,user_id例如N

和一张桌子:

我需要从这些N整数中获取user_id并为每个user_id获取具有最高 3 的前 3 个content整数score。所以基本上我需要运行这个查询N时间:

N可能是一个非常大的数字。所以我非常想避免一个接一个地运行这些查询。

有什么方法可以减少我需要运行的查询数量?也许某种批量选择?

0 投票
2 回答
126 浏览

sql - 当查询中存在 IF 条件时,CTE 不起作用

我正在尝试在我的查询上添加功能以选择将在特定条件下执行的查询。

根据我上面的示例测试代码,我得到:

消息 319,级别 15,状态 1,第 5 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式或 xmlnamespaces 子句,则前面的语句必须以分号结束。

消息 102,级别 15,状态 1,第 8 行
',' 附近的语法不正确。

也许我错过了什么?

0 投票
1 回答
243 浏览

mysql - 大数据量能不能执行得更快【MySQL】

有什么办法可以优化下一个查询:

这里的主要任务是如果我有特定的keyword_id(CURRENT_KID),我需要找到曾经属于任何文章的所有关键字以及CURRENT_KID,并根据这些关键字的使用量对结果进行排序

表定义为:

“解释”的输出吓到我了

http://o7.no/J6ThIs

在大数据上,这个查询可以杀死一切:) 我能以某种方式让它更快吗?

谢谢。