问题标签 [query-performance]

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 投票
3 回答
79 浏览

mysql - mysql query result order issue

I have a table with these fields: userid, logintime, birthdate
I need to get ALL users between birthdate X and Y ordered with the most recently logged in first.

If I defined an index on just birtdate, mysql would use filesort to order the results which I would like to avoid (table is getting big, query is popular).
Defining an index (logintime, birthdate) doesn't make sense to me since logintime isn't even in the WHERE clause (I'm only restricting the result set by birthdate)

Any elegant solutions in mysql?

0 投票
4 回答
1162 浏览

sql - 为什么这个 oracle select 语句需要几分钟才能完成?

这些表只有不到 20 个字段,属性大约有 900 万行,而列表有 300 万行,但这应该不是问题。这就是数据库的用途...

Listing_ids 是 Number 类型的。到目前为止,我们最好的猜测是,由于属性表还有 600 万行的列表 ID 并不实际指向列表,因此 Oracle 会花费大量时间寻找不存在的列表。这甚至有意义吗?

我对查询运行了一个解释计划并获得了以下信息:

编辑:表模式:

更新 oracle 统计信息后的一些更新统计信息:

统计数据

更新统计后的新执行计划:

0 投票
5 回答
1439 浏览

mysql - 优化查询。想要在子查询中不使用 max 的情况下选择最后一条记录

这是我的查询:

表 B (StockEntry) 可能包含一条或多条记录,而表 A (ItemMaster) 肯定只有该 ItemID 的一行。

如果我删除 WHERE 子句中的子查询,它会显示一行或多行。我觉得通过 WHERE 子句中的子查询选择 max(RecordID) 会减慢查询速度。我在 RecordID、InvoiceDate、ItemID 上确实有索引,但MySQL日志仍然显示此查询执行不佳。由于某种原因,我无法更改列顺序。

有没有更好的方法来优化这个查询?

0 投票
4 回答
2026 浏览

sql-server - 为什么一个查询非常慢,但在相似表上的相同查询却在眨眼间运行

我有这个查询......运行速度非常慢(几乎一分钟):

PRIME 表有 18k 行,并且在 PrimeId 上有 PK。

ATTRGROUP 表有 24k 行,并且在 PrimeId、col2、RelatedPrimeId 和 cols 4-7 上具有复合 PK。RelatedPrimeId 上还有一个单独的索引。

该查询最终返回 8.5k 行 - PRIME 表上与 ATTRGROUP 表上 PrimeId 或 RelatedPrimeId 匹配的不同 PrimeId 值

我有相同的查询,使用 ATTRADDRESS 而不是 ATTRGROUP。ATTRADDRESS 具有与 ATTRGROUP 相同的键和索引结构。它只有 11k 行,诚然,它更小,但在这种情况下,查询运行大约一秒钟,并返回 11k 行。

所以我的问题是:

尽管结构相同,但一个表上的查询怎么会比另一个慢得多。

到目前为止,我已经在 SQL 2005 和(使用相同的数据库,升级的)SQL 2008 R2 上尝试过这个。我们两个人独立获得了相同的结果,将相同的备份还原到两台不同的计算机上。

其他详情:

  • 括号内的位在不到一秒的时间内运行,即使在慢查询中也是如此
  • 执行计划中有一个可能的线索,我不明白。这是其中的一部分,有一个可疑的 320,000,000 行操作:

在此处输入图像描述 在此处输入图像描述

但是,该表上的实际行数略高于 24k,而不是 320M!

如果我重构括号内的查询部分,使其使用 UNION 而不是 OR,因此:

...然后慢查询需要不到一秒钟。

我非常感谢对此的任何见解!如果您需要更多信息,请告诉我,我会更新问题。谢谢!

顺便说一句,我意识到在这个例子中有一个冗余连接。这不能轻易删除,因为在生产中整个事物是动态生成的,并且括号中的位采用许多不同的形式。


编辑

我已经在 ATTRGROUP 上重建了索引,没有显着差异。

编辑 2

如果我使用临时表,则:

...再一次,即使在原始的 OUTER JOIN 中使用 OR,它也可以在不到一秒的时间内运行。我讨厌这样的临时表,因为它总是让人感觉像是在承认失败,所以这不是我将要使用的重构,但我认为它带来了如此不同的效果很有趣。

编辑 3

更新统计数据也没有区别。

感谢您迄今为止的所有建议。

0 投票
1 回答
109 浏览

postgresql - 帮助改进查询。尝试使用解释

我有一个实际上并不复杂的查询。它的运行时间接近 250 毫秒,这非常慢。我已经使用 EXPLAIN 分析了查询,并注意到了 seq 扫描。我为此查询中使用的所有列都有适当的索引。所以我不确定从这里去哪里。

这是我所拥有的:

如前所述,这是我从架构文件中获得的索引:

我假设序列扫描是什么杀死了这个查询。我在那张桌子上有非常彻底的索引。所以我迷路了。任何帮助将不胜感激。

谢谢。

0 投票
1 回答
1990 浏览

java - 返回最后一行时,带有比较过滤器的 HBase 扫描有很长的延迟

我让 HBase 在独立模式下运行,并且在使用 Java API 查询表时遇到了一些问题。该表有几百万个条目(但可能会增长到数十亿),它们具有以下行键指标:

我使用两个比较操作过滤器来查询代表时间间隔的特定行范围。

当我调用 ResultScanner#next() 方法时,一切正常,直到它到达通过过滤器指定的键范围的最后一行。在 ResultScanner 返回最后一行之前最多需要 40 秒,这在词法上小于行范围上限。

当我更改 filterList 中过滤器的顺序时

扫描仪最多需要 40 秒才能开始返回任何结果,但返回最后一行没有更多延迟,所以我认为延迟来自 CompareOp.LESS - 过滤器。

我知道解决此延迟的唯一方法是省略 upperRowFilter 并手动检查行键是否超出范围,但我确信一定有问题,因为我在搜索互联网时没有发现任何问题。

我也已经尝试通过缓存来摆脱它,但是当我使用的缓存大小小于返回的行数时,它不会改变任何东西,如果我使用的缓存大小大于返回的行数,则会延迟仍然存在,但在返回任何结果之前再次出现。

你知道什么会导致这种行为吗?我做错了还是我错过了什么?

提前致谢!

0 投票
4 回答
405 浏览

sql - SORT 的成本正在减慢我的查询速度

PostgreSQL 7.4(是的升级)

所以在我的 WHERE 条件下,我有这个

替代语法,但成本没有变化

寻找一种成本有效的方法来通过字符串的开头限制结果。因此,如果字符串以 01、123、5555、44444 或 99 开头,则将其添加到结果集中。

有什么想法吗?

注意:FieldID 被索引查看解释数据以查看查询中的瓶颈,当添加上述代码时,排序成本会上升并减慢数据集/结果的返回速度。

解释的输出:

由于查询很复杂,还有很多,但是如果我删除部分代码,排序成本就会下降

0 投票
4 回答
504 浏览

sql - SQL 性能,在 SELECT 和 WHERE 条件下执行得更快

更新:废话!它不是一个整数它的字符变化(10)

像这样执行查询使用索引

但如果我执行此操作,则不使用索引

或这个

这也是

我的索引看起来像这样

运行 PostgreSQL 7.4(是的升级)

我正在优化我的查询,并想知道在语句中的 SELECT 或 WHERE 子句中使用三种类型的表达式之一是否有任何性能提升。

注意:使用这些约束样式执行的查询返回大约 200,000 条记录

示例数据是一个字符可变(10)0123456789并且它也被索引

1.(子串)

2.(喜欢)

3.(正则表达式)

在 WHERE 子句中使用一个比另一个有任何性能优势吗?

1.(子串)

2.(喜欢)

3.(正则表达式)

在 SELECT 中使用一个选项并在 WHERE 子句中使用不同选项会提高性能吗?

0 投票
1 回答
570 浏览

mysql - MySQL 什么时候重建 FTS 索引?

如果您想使用MySQL 全文搜索功能,您可以在类型为 VARCHAR 的字段上定义全文索引。由于行是插入和更新的,mysql 必须保持索引是最新的。我的问题是:MySQL 什么时候重建 FTS 索引?

  • A) 在影响索引的 INSERT 或 UPDATE 发生后立即。
  • B) 当第一个 SELECT 运行需要最近受 UPDATE 或 INSERT 影响的索引时。
  • C) 别的东西。

不必要的背景信息:我的经验似乎认为选项 B。这是对的吗?我问是因为我一直在经历突然的随机慢查询,这些查询执行全文搜索,我不知道为什么有些慢而不是其他的。我的预感是,如果他们正在等待 mysql 重建 FTS 索引,查询可能会很慢,但我不知道 mysql 是否是这样工作的。随机慢查询的示例(通常相同的查询在一秒钟内运行),慢日志中没有慢 UPDATE 或 INSERT:

注意 Lock_time。我在慢速日志中看不到任何其他 INSERT 或 UPDATE,所以我不确定它在等待什么。这就是为什么我猜它可能正在等待 FTS 索引重建?

0 投票
3 回答
573 浏览

mysql - 慢 SQL 查询的特点

最近在一次采访中被问到为什么SELECT对 MySQL 数据库的查询会非常慢,并提出以下问题:

  1. JOIN在 select 上执行多个s
  2. 关键过滤器字段上没有索引(索引?)

还被要求解决问题,我说:

  1. 如果查询非常重要,则非规范化您的数据(我知道这会导致数据重复,但还有其他方法可以避免 JOINs 吗?)
  2. 向过滤列添加索引。

是否还有其他特征说明 SQL 查询效率低下的原因?请注意,我纯粹是在寻找有关如何加快查询速度的提示,因此假设数据库服务器完美无缺:-)