问题标签 [query-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 投票
2 回答
118 浏览

sql - 优化查询

我在数据库中有一个包含 7k 多条记录的表。我有一个在该表中搜索特定 id 的查询。(id 是自动递增的)

查询是这样的->

此查询将对 7k + 数据进行所有搜索.......无论如何我都可以优化此查询,以便仅对 500 或 1000 条记录进行搜索......因为这些记录会增加一天一天,我的查询会越来越重。有什么建议吗??????

0 投票
5 回答
269 浏览

sql - 如何优化此查询...?

我有两张桌子,一张用于路线,一张用于机场。

Routes 包含刚刚超过 9000 行,我已经为每一列建立了索引。机场只有 2000 行,我也为每一列编制了索引。

当我运行此查询时,最多可能需要 35 秒才能返回 300 行:

用“DESCRIBE”运行它,我得到了以下信息,但我不能 100% 确定它告诉我什么。

我能想到的唯一选择是运行两个单独的查询并将它们与 PHP 连接起来,但我无法相信这样的事情会杀死 mysql 服务器。所以像往常一样,我怀疑我在做一些愚蠢的事情。SQL 是我的第一个弱点。

0 投票
3 回答
259 浏览

mysql - 如何优化这个子查询和连接的 MySQL 查询?

我对 mysql 非常熟悉,我需要一些关于清理查询的提示。它在整个站点中以多种形式使用。它有一些子查询派生表和乐趣。继承人的查询:

下面是解释:

和表格:

0 投票
1 回答
2281 浏览

sql - SQL中的稀疏点积

想象一下,我有一个存储一系列稀疏向量的表。稀疏向量意味着它仅在数据结构中显式存储非零值。我可以有一个 100 万维向量,但我只存储非零维度的值。所以大小与非零条目的数量成正比,而不是与向量的维数成正比。

表定义是这样的:vector_id : int dimension : int value : float

现在,在普通编程领域,我可以在 O(|v1| + |v2|) 时间内计算两个向量的内积或点积。基本上,该算法是存储按维度排序的稀疏向量并遍历每个维度中的维度,直到找到维度之间的冲突并将共享维度的值相乘并继续将它们相加,直到到达任一向量的末尾.

在 SQL 中实现这一目标的最快方法是什么?

0 投票
4 回答
12934 浏览

sql - SQL join 与一系列值(整数范围、日期范围等)

我有两个表,第一个是一个大表(数百万行),最有趣的列是一个整数,我将称之为“键”。我相信这个解决方案对于日期或日期时间范围也是相同的。

第二个表要小得多(数千行),有一堆我感兴趣的属性,这些属性是在一系列键上定义的。它具有以下结构:

key_lower_bound:int key_upper_bound:intinteresting_value1:浮动interesting_value2:intinteresting_value3:varchar(50) ...

我想查找第一个表中的所有值,并根据第一个表中的键是否在区间 [key_lower_bound, key_upper_bound) 内将它们与第二个表“连接”。

这在数学上有点像稀疏内积或稀疏点积,但有点奇怪,因为第二个表中涉及这些范围。不过,如果我用代码编写它,那将是一个 O(|first table| + |second table|) 算法。我会保留一个指向两个(排序的)列表的指针并遍历它们,以确定第一个表中的每个键是否属于第二个表的范围。诀窍是,每次检查第一个表中的键时,我都不会遍历第二个列表,因为两个列表都是排序的。

当我构建最明显的 SQL 查询(涉及检查键是否为 > key_lower_bound 和 < key_upper_bound)时,它花费的时间太长了。

该天真的查询存在某种二次行为,因为我认为查询引擎正在对第二个表中的每一行进行每次比较,而实际上,如果第二个表按 key_lower_bounds 排序,这不应该是必要的。所以我得到了 O(|first table| x |second table|) 类型的行为,而不是所需的 O(|first table| + |second table|) 行为。

是否可以获得线性 SQL 查询来执行此操作?

0 投票
14 回答
134894 浏览

mysql - JOIN 查询与多个查询

JOIN 查询比几个查询快吗?(您运行主查询,然后根据主查询的结果运行许多其他 SELECT)

我问是因为加入它们会使我的应用程序设计复杂化很多

如果它们更快,任何人都可以粗略地估计多少?如果是 1.5 倍,我不在乎,但如果是 10 倍,我想我会。

0 投票
4 回答
62266 浏览

sql - 与 WHERE 子句一起使用时优化 Oracle CONNECT BY

在同一查询中应用条件之前应用OracleSTART WITH ... CONNECT BY子句。因此, WHERE 约束无助于优化。WHERECONNECT BY

例如,以下查询可能会执行全表扫描(忽略 上的选择性dept_id):

我尝试通过两种方式提高性能:

查询一:

查询 B:

虽然这两个查询的性能都比原始查询好得多,但在 Oracle 10g 第 2 版中,查询 B 的性能确实比 A 好得多。

CONNECT BY对于andWHERE子句,您是否有类似的性能优化来处理?您如何解释查询 B 比查询 A 做得更好?

0 投票
7 回答
3341 浏览

optimization - 在 MySQL 中高效查询 15,000,000 行表

考虑以下数据库表:

  • 包含 13,000,000 行的“消息”表(每条消息一行)。
  • 表“用户”有 3,000,000 行(每个用户一行)。

以下查询用于获取一堆消息和相应的用户:

每个查询获取 100 条消息。

“消息”在 id(主键,BIGINT不是自动生成)和 user_id 上建立索引。

“用户”在 id 上建立索引(主键,INT 自动生成)。

数据库是使用 MyISAM 的 MySQL。

目前,查询的执行时间超过 3000 毫秒,这让我感到困惑,因为“消息”是在“id”上索引的,所以检索正确的行应该非常快。

我的问题是:鉴于描述的场景和设置,3000 毫秒的查询时间是“正常的”还是我遗漏了什么?如果需要更多详细信息,请告诉我。

更新 #1:以下是表定义:

我在定义中观察到的唯一“非标准”是“messages.id”是 BIGINT 而不是 INT。这可能是一个暗示吗?

0 投票
2 回答
167 浏览

mysql - 为什么我在这个非常简单的 MySQL 查询上得到文件排序?

表有两列:

我在表中放了四项:

现在,如果我这样做:

我得到了可怕的“使用文件排序”。这是怎么回事?根据此页面,它应该使用索引进行排序。难道我做错了什么?

在 XP 上的 MySQL 5.0.41 和 ubuntu 上的 5.0.67 上测试。

更新:我在表中添加了 1,110,000 行,我添加了一个 VARCHAR 列并用文本填充它。表大小现在为 135MB,我仍在“使用文件排序”。

  1. 任何人都有关于如何快速添加大量行的任何提示?
  2. 在什么时候我应该考虑一个“足够大”的表来进行查询优化测试?
0 投票
6 回答
1277 浏览

sql - SQL:优化问题,有行吗?

我在一些相当大的表上得到了一个包含五个连接的查询(最大的表是 1000 万条记录),我想知道行是否存在。到目前为止,我已经这样做来检查行是否存在:

使用此查询,在存储过程中需要 22 秒,我希望它接近“即时”。这甚至可能吗?我该怎么做才能加快速度?

我获得了要加入的字段和 WHERE 子句中的字段的索引。

有任何想法吗?