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

sql - Sqlite 数据库优化

我有包含三个表的 sqlite3 数据库:

我有 sql 脚本来选择包含字典中单词的所有文档:

当字典包含 ~= 400,000 条记录、document ~= 1000 条记录和 document_index ~= 500,000 条记录时,查询在我的 iPad 2 上执行大约 30 秒。

如何优化查询或改变数据库结构(例如添加索引)以减少查询时间?

0 投票
2 回答
1184 浏览

sql - 在数据库级别设置 MaxDOP 是否会限制该数据库或该数据库中运行的查询的 CPU?

我们有一个 16 核的 CPU。CPU 仅用于具有单个数据库的 SQL Server。目前,MaxDOP 设置为 0。

我们正在考虑将 MAXDOP 更改为 8 以尝试限制查询使用的最大 CPU 数量,但是顾问 DBA 表示这将限制数据库使用的 CPU 数量。

有人对这个有经验么?

谢谢

0 投票
2 回答
495 浏览

mysql - mysql 性能 INSERT 到表 SELECT 中进行报告

我正在为报告进行 mysql 查询。这个想法是有一个简单的表说'reportTable',其中的值是从各个地方获取的。然后我可以更轻松地使用 reportTable 而无需记住大量的连接等,并且还可以为其他项目共享此表。

  1. 我是否应该分解查询的内部插入部分,以便它一次执行块,我可能会添加数万行?

0 投票
4 回答
637 浏览

mysql - SQL - 对子查询的调用过多

就“技能名称”的子查询选择而言,以下查询相当慢。当我针对 SQL 执行运行配置文件时,我从 ACDCallinformation 表中针对技能名称的子查询的每行查询太多。

优化此 SQL 查询的最佳方法是什么,或者是否有 MySQL 工具来帮助检查 SQL 查询的成本和优化脚本?

不确定显示数据的最佳方式:

ACDCALLINFORMATION - 当前行数 3028

SKILLINFO - 平均行数为 5-10

这是预期的输出:

0 投票
1 回答
330 浏览

mysql - MySQL查询优化:如何优化投票计算?

希望你一切都好。

我需要这个数据库的帮助:

在此处输入图像描述

这是一个存储选票的数据库。用户选择他们喜欢的音轨,然后投票给他们。他们可以投票“赞成”或“反对”。非常简单。但是,当涉及到计算数据时,它会变得毛茸茸的。

这是一个键值样式表,存储最常用的统计信息(只是某种缓存):

投票

投票表持有投票本身。这里唯一有趣的字段是Type, 的值意味着:

  1. 0- 应用程序投票,用户使用 UI 为曲目投票
  2. 1- 导入投票(来自外部服务)
  3. 2- 合并投票。实际上与 Imported Vote 相同,但它实际上做了一个注释,该用户已经使用外部服务为该曲目投票,现在他正在使用应用程序重复自己。

追踪

轨道是为自己保存总统计数据。喜欢、不喜欢、来自外部服务的喜欢 ( LikesRP)、来自外部服务的不喜欢 ( DislikesRP)、喜欢/不喜欢调整的数量。

应用程序

该应用程序需要获得以下投票:

  1. 过去 7 天内投票最多的 5 首曲目
  2. 过去 7 天内投票最多的 5 首曲目
  3. 过去 7 天内投票最多的 5 首曲目,其中的投票来自外部服务 ( Vote.Type = 1)
  4. 上个月投票最多的 100 首曲目

为了获得 100 个投票最多的曲目,我使用以下查询:

此查询工作正常,它支持调整(客户想要调整列表中的轨道位置)。几乎相同的查询用于获得 5 个最上/下投票的曲目。任务 #3 的查询是这样的:

问题是第一个查询需要大约 2 秒的时间来执行,而我们的票数少于 4k。到年底,这个数字将是大约 20 万张选票,这很可能会扼杀这个数据库。所以我正在想办法解决这个难题。

现在我归结为这些问题:

  1. 我是否使数据库设计错误?我的意思是,它会更好吗?
  2. 我是不是查询错了?
  3. 还有什么我可以改进的吗?

我做的第一件事是缓存。但是,好的,这彻底解决了问题。但我对 SQL 相关的解决方案很好奇(总是倾向于完美)。

我有一个想法的第二件事是将这些计算值放到Meta表中并在投票过程中更改它们。但是我的时间很短,只是尝试一下。顺便说一句,这值得吗?或者,企业级应用如何解决这些问题?

谢谢。

编辑

我不敢相信我忘了包括索引。他们来了:

0 投票
1 回答
369 浏览

oracle - 关于优化在大量数据上执行的 Oracle SQL 查询的建议/技巧

不要在看到下面的 Oracle SQL 查询后立即运行!:)

我把完整的查询放在 orderrer 中询问一些关于优化的建议。我使用 Oracle 解释计划工具来帮助我确定一些优化方法,但我非常坚持。你能给我一些关于这个查询的潜在优化的建议/提示/良好做法/吗?

事实:

  • PERSONNE 和 AFFAIRE 表包含大约 100 万行
  • 表 EVENEMENT 包含大约 3000 万行

提前致谢 !

这是相应的解释计划:

0 投票
1 回答
117 浏览

mysql - 嵌套 GROUP BY 优化

我有以下查询:

结果是(这是我想要的结果):

子查询的结果是:

有什么办法可以避免这里的子查询(也许可以优化?)。数据库:MySQL

0 投票
2 回答
213 浏览

mysql - MySQL InnoDB 采用的执行计划效率不高

我无法使用 MySQL InnoDB 优化器优化请求。以下查询(查询 1)高效运行:

计划(计划一)如下:

到现在为止还挺好。

而下面稍作修改的查询(查询 2)将采用灾难性的执行计划:

结果是一样的,但是计划(计划2)现在是这样做的:

如果您想知道,那个新的子查询...

...只不过返回在查询 1 中硬编码的四行:

所以查询 (1) 和 (2) 是等价的。

你猜怎么着,我需要查询 2,而不是一个。我希望查询 2 与查询 1 一样高效。我尝试了以下方法:

  1. 查询 3:添加FORCE INDEX(RNID_FIELDID)到查询 2。MySQL 直接忽略它。

    解释 select * from ah_problems force index (rnid__fieldid) where rnid in (select rec.rnid as record_id from ar_records rec where rnid in (6022342, 6256614, 5842714, 6302489)) 和 fieldid in (5,6)

执行计划与计划2相同。

  1. 查询 4:ORDER BY RNID, FIELDID向查询 3 添加一个。我在其他一些问题上看到这可能会欺骗优化器。它没有帮助。

    解释 select * from ah_problems force index (rnid__fieldid) where rnid in (select rec.rnid as record_id from ar_records rec where rnid in (6022342, 6256614, 5842714, 6302489)) and fieldid in (5, 6) order by rnid, fieldid

计划 4 现在正在使用索引,但行数仍然是灾难性的:

如果这有帮助,这就是我的ah_problems表格的定义。不幸的是,我无法更改表格的定义。我能做些什么来让 MySQL 优化器使用计划 1 来攻击ah_problems查询 2 中的表吗?

0 投票
2 回答
12907 浏览

php - SQL:如何每天选择一条记录,假设每天包含多于1个值MySQL

我想从 to 中选择记录'2013-04-01 00:00:00''today'但是每一天都有很多价值,因为它们每 15 分钟保存一个值,所以我只想要每天的第一个或最后一个值。

表架构:

错误的 SQL:

如果可能的话,我想合一……

十分感谢。

编辑: 我的意思是,我每天都有一个查询,但我只想从reading_date >= '2013-04-01 00:00:00'c进行一次查询

EDIT2: 我有64,260条记录,table.value_magnitudes执行和响应该查询需要很长时间,有时连接超时。

0 投票
4 回答
7352 浏览

mysql - @Symbol——Mysql中递归SELECT查询的解决方案?

关于 Mysql 中的递归 SELECT 查询有很多问题,但大多数答案是“Mysql 中的递归 SELECT 查询没有解决方案”。

实际上有一个特定的解决方案&我想清楚地知道它,所以这个问题是可以在 ( how-to-do-the-recursive-select-query-in-mysql )找到的上一个问题的以下问题

假设你有这张表:

& 你想在 col1 中找到所有连接到值“1”的链接,即你想打印出来:

然后你可以使用这个简单的查询:

好的,但是,如果您的表有 2 条记录在 col1 中包含“1”和 2 条在 col1 中包含“3”的记录,例如:

然后,当用户在 col1 中搜索“1”时,它应该显示连接到 2“1”的所有链接,即它应该显示以下预期结果:

所以,我的问题是我们如何修改上述查询,以便它显示所有链接,如上述预期结果?

编辑: @ Gordon,但如果我们省略,select distinct col1, col2 from那么这个查询意味着什么,你能处理这个吗(因为 childID 增加了,所以我们可以订购 table1 ):

在这种情况下,我们不用担心顺序,例如,如果这是数据:

输出将是:

所以我们得到这个结果1,2,4,3对吗?& 如果 col1 在1,2,4,3. 然后我们可以得到最终的预期结果。

如果是这样的话,你能想到任何排除我刚才提到的解决方案的特殊情况吗?