问题标签 [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 投票
4 回答
8700 浏览

sql - 如何进一步优化派生表查询,它的性能优于 JOINed 等效项?

更新:我找到了解决方案。请参阅下面的我的答案。

我的问题

如何优化此查询以最大程度地减少停机时间?我需要更新 50 多个模式,票证数量从 100,000 到 200 万不等。是否建议尝试同时设置 ticket_extra 中的所有字段?我觉得这里有一个我没有看到的解决方案。一天多来,我一直在努力解决这个问题。

此外,我最初尝试不使用子 SELECT,但性能比我目前拥有的要差得多。

背景

我正在尝试针对需要运行的报告优化我的数据库。我需要聚合的字段计算起来非常昂贵,因此我将现有模式非规范化以适应此报告。请注意,我通过删除几十个不相关的列来大大简化了票证表。

我的报告将按Manager When CreatedManager When Resolved汇总票数。这种复杂的关系如下图所示:

EAV
(来源:mosso.com

为了避免即时计算所需的六个讨厌的连接,我将下表添加到我的模式中:

现在的问题是,我没有将这些数据存储在任何地方。经理总是动态计算的。我在多个数据库中拥有数百万张具有相同架构的票证,需要填充此表。我想以尽可能高效的方式执行此操作,但在优化我用来执行此操作的查询方面没有成功:

此查询需要一个多小时才能在具有 > 170 万张票证的模式上运行。这对于我拥有的维护窗口是不可接受的。此外,它甚至不处理计算 manager_resolved 字段,因为尝试将其组合到同一个查询中会将查询时间推到平流层。我目前的倾向是将它们分开,并使用 UPDATE 来填充 manager_resolved 字段,但我不确定。

最后,这是该查询的 SELECT 部分的 EXPLAIN 输出:

非常感谢您的阅读!

0 投票
2 回答
57 浏览

query-optimization - 是否有最佳方法/算法来处理 BOOL 或算术运算中不必要的额外括号

我有这个,我以编程方式构建它:

为了调试,我正在寻找一种基本上可以将其减少到所需的最少括号的好方法:

我在 C# 上,但如果你有一个很好的技术,我会移植它。

0 投票
4 回答
2664 浏览

sql - 如何加快这个 SELECT CONCAT/GROUP BY 查询?

我正在从数据库中选择位置(城市、州)。问题是查询运行有点慢,我不知道如何加快它。例如:

无论如何,该位置都会有一个 CONCAT,因为我希望数据库返回一个漂亮的连接版本的位置(除非有理由在代码中这样做)。例如,“纽约,纽约”。实际上,有时会添加第三列(邮政编码)。我在 MySQL 上运行。

优化此查询的最佳方法是什么?

另外,作为次要问题,添加“DISTINCT”会以任何方式减慢查询速度吗?例如:

(我现在正在这样做,但是在提出这个问题的过程中,我意识到由于 GROUP BY 子句,不需要 DISTINCT;但是,由于没有必要,我想知道它是否有任何区别,如果我应该打扰摇船以加快查询速度。)

编辑:已经有一个关于城市、州和邮政编码的索引;加上其中的组合(城市,邮政编码;和州/邮政编码单独)。

0 投票
6 回答
5456 浏览

sql - 为什么这会加快我的 SQL 查询速度?

不久前,我从一位 DBA 朋友那里学到了一个技巧,可以加快某些 SQL 查询的速度。我记得他提到它与 SQL Server 如何编译查询有关,并且查询路径被迫使用索引值。

这是我的原始查询(需要 20 秒):

这是“优化”查询(不到 1 秒):

谁能详细解释为什么它运行得这么快?我只是想更好地理解这一点。

0 投票
2 回答
1398 浏览

mysql - MySQL - 查找与连接表中的所有行和其他表中的字符串匹配的行

这是 MySQL 的后续- 查找与连接表中的所有行匹配的行

感谢这个网站,查询运行完美。

但现在我不得不扩展查询以搜索艺术家和曲目。这导致我进行以下查询:

我认为这个查询的解释看起来相当不错:

你看到优化空间了吗?Query 的运行时间大约为 7 秒,不幸的是。欢迎任何建议。

TIA

0 投票
3 回答
177 浏览

sql-server - SQL Server 索引使用问题

假设如下:

为什么第二个索引会导致索引扫描,而第一个索引会导致索引查找?键的顺序有什么不同?

0 投票
4 回答
8585 浏览

mysql - MySQL JOIN 查询需要很长时间才能完成

我有一个名为 users 的表,其中大约有 250,000 条记录。我有另一个名为 staging 的表,其中包含大约 75,000 条记录。Staging 只有一列,msisdn。我想检查用户中不存在暂存的多少行。

我有以下查询,我已经在一个小数据子集上进行了测试,它似乎工作正常:

然而,问题是当我尝试在 250k 用户的完整列表上运行此查询时。在我停止之前它运行了一个小时。有什么办法可以优化这个查询吗?

我已经开始对暂存中的数据子集运行查询,但这是非常手动的:

msisdn 是 staging 表的主键,但它不是表 users 的主键。我不知道这是否重要。

0 投票
3 回答
2328 浏览

php - 如果我的查询中有太多的 OR 运算符,如何优化 mysql 查询?

使用 PHP 和 MySQL

我从 facebook 抓取了一系列 facebook 用户 ID。

现在我想在我的应用程序中为这个数组找到相应的用户名。

显然,在我的应用程序中,用户表包含唯一的用户名和唯一的 fb_uid 值。

我对 oof 编程的基本理解使我想到了两种方法:

1)使用循环,遍历fb_uid的数组,一一找到用户名。

或者

2) 创建一个怪物查询,例如 select distinct(username) from users where fb_uid = value1 OR fb_uid = value2 ...

那么有更好的出路吗?

谢谢你。

0 投票
5 回答
2838 浏览

performance - Oracle 10g 中的字符串匹配,其中任何一方都可以有通配符

测试用例模式和数据如下:

现在忽略掩码列并假设存在 specialmatch 函数:

应该产生:

下一个,

应该产生:

下一个,

应该产生:

下一个,

应该产生:

关于如何制作特殊匹配功能的任何想法?

我天真的方法是写一个特殊的字符串比较 udf(伪代码):

同样在进行匹配之前,需要将掩码覆盖在 val 上。

例如:val='1_345678', mask=' _ _' => 1_34567_ 并且匹配 12345678 和 19345679 但不匹配 92345678。

但是如何做到这一点来利用索引、优化器等......

0 投票
4 回答
472 浏览

mysql - MYSQL 查询会显着降低我的网站速度吗?

嘿,我正在做一个网站,要求我在每个网站上使用大约 5 个 mysql "SELECT * FROM" 查询,我想知道它是否会以任何方式减慢下载速度。