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

sql-server - 您如何修复在缓存之前运行缓慢的查询

我有一些查询导致我们的实时环境超时。(>30 秒)

如果我运行分析器并获取正在运行的确切 SQL 并从 Management Studio 运行它,那么它们第一次运行需要很长时间,然后每次运行下降到几百毫秒。

这显然是 SQL 缓存数据并将其全部存储在内存中。

我确信可以对 SQL 进行优化,使其运行得更快。

我的问题是,当我第二次运行这些查询时,数据已经被缓存并且速度很快,我该​​如何“修复”这些查询?

0 投票
2 回答
499 浏览

sql - 用较少的查询检索具有相关标签的博客文章列表

想象这两个表:

哪个是最好的方法(不改变表结构(是的,我不介意它们是否没有标准化))使用不太可能的查询检索带有所有标签的项目列表(即不执行 11 个查询来检索 10 个项目)?

0 投票
3 回答
563 浏览

sql - 使用 GROUP BY/HAVING 重构子查询?

我正在构建一个 MySQL 查询以确定在给定日期范围内出现的几个类别中的每个类别中有多少项目。我最初的尝试是这样的:

该表非常大,我想重构查询以加快速度,但我不确定如何使用 GROUP BY/HAVING 语句重写它,还是有另一种我遗漏的方法?

编辑:示例结果集 - 像这样:

0 投票
5 回答
1268 浏览

tsql - 查询优化 TSQL 和其他

假设我有一个类似下面的 sql 语句,变量 @FOO 在代码的前面某处设置:

查询优化器是否足够聪明,可以先执行 OR 的第二面(@FOO IS NULL),因为(另一个假设)执行空值检查比执行字段比较更快?

我做了一些非正式的基准测试,不仅没有看到差异,而且我的尝试得到了不同的结果时间,这使我无法进行适当的比较。

0 投票
19 回答
8951 浏览

sql - 优化使用 between 子句的 SQL

考虑以下 2 个表:

表 A 中的每条记录都映射到表 B 中的 1 条记录。这意味着表 B 没有重叠期间。表 A 中的许多记录可以映射到表 B 中的同一记录。

我需要一个返回所有 A.id、B.id 对的查询。就像是:

我正在使用 MySQL,但无法优化此查询。表 A 中有约 980 条记录,表 B 中有 130.000 条记录,这需要很长时间。我知道这必须执行 980 次查询,但是在一台强大的机器上花费超过 15 分钟是很奇怪的。有什么建议么?

PS 我无法更改数据库架构,但我可以添加索引。但是,时间字段上的索引(具有 1 个或 2 个字段)没有帮助。

0 投票
2 回答
114 浏览

sql - 如何处理 SQL 中的长比较

我有一个关于 SQL 的病态问题,所以我通常通过构建快速软件应用程序来处理我的 SQL 问题来对我的所有数据库问题进行分类。

(就像我在这种情况下所做的那样)

感谢 StackOverflow,我想我可能会因为正确性而感到羞耻,所以我想学习如何在实际 SQL 或 T-SQL 本身中进行这种 SQL 故障排除(如果可能的话):

我有:

数据库 DB1 表 A (unitNo, BuildingNo)

数据库 DB2 表 B (unitNo, BuildingNo)

  1. 我想从数据库 DB1 中找出表 A 上存在的单元(单元号),而数据库 DB2 中的表 B 上不存在这些单元(单元号),反之亦然。

  2. 可以有多个单元具有相同的单元号,这是因为可以将相同的单元号分配给不同建筑物的单元。

  3. 我没有对任何数据库的写访问权。

我希望这不会被视为“给我的 codz”帖子,我想知道比我更流利的 SQL 的人如何对这种算法进行排序,教程或提示的帖子非常受欢迎,不需要完整的代码,但如果它有助于有意义,那么请这样做。

起初我以为我可以从一个表中获取所有单元号,然后从另一个表中排除它们,如下所示:

这通常会起作用,但是任何一个表中的单元数量都是巨大的,尝试这样做会使 SQL 服务器崩溃:

“堆栈空间不足”

谢谢,

里克

0 投票
6 回答
1123 浏览

sql - 优化查询选择时间段

给定下表:

有没有办法快速搜索常数?

例如

我正在使用 MySQL。在任一字段上都有索引仍然需要检查范围。此外,两个字段上的索引不会产生影响(仅使用第一个)。

我可以向表中添加字段/索引(因此添加包含两个字段信息的索引构造字段是可以接受的)。

PS对此的需求来自这个问题:Optimize SQL that uses between子句

0 投票
6 回答
152289 浏览

mysql - mysql 从最后 n 行中选择

我有一个带有索引(自动增量)和整数值的表。该表有数百万行长。

如何最有效地搜索某个数字是否出现在表格的最后 n 行中?

0 投票
8 回答
18001 浏览

sql - 提高 Sql Delete 的性能

我们有一个查询来根据 id 字段(主键)从表中删除一些行。这是一个非常简单的查询:

问题是 id 的数量可能很大(例如 70k),因此查询需要很长时间。有没有办法优化这个?(我们正在使用 sybase - 如果这很重要)。

0 投票
2 回答
741 浏览

sql-server - SQL 查询的仅使用书签查找选项的索引查找?

我正在优化针对遗留系统中非常宽的表的 SQL 查询。由于各种原因,我目前无法缩小表格范围。

我的查询运行缓慢,因为它对我创建的索引执行索引查找,然后使用书签查找来查找它需要的索引中不存在的其他列。书签查找占用了 42% 的查询时间(根据查询优化器)。

该表有 38 列,其中一些是 nvarchars,因此我无法创建包含所有列的覆盖索引。我试图通过创建覆盖所有列的索引来利用索引交集,但是那些“覆盖”索引没有被执行计划拾取并且没有被使用。

此外,由于通过此查询提取了 38 列中的 28 列,因此我将表中的 28/38 列存储在这些覆盖索引中,所以我不确定这有多大帮助。

您是否认为书签查找与它所获得的一样好,或者另一种选择是什么?

(我应该指定这是 SQL Server 2000)