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

tsql - sybase - 除非字符串是硬编码的,否则无法使用索引

我正在使用Sybase 12.5.3 (ASE);我是 Sybase 的新手,尽管我已经广泛使用 MSSQL。我遇到了一个存储过程非常慢的场景。我已经将问题追溯到一个相对较大的表的单个 SELECT stmt。修改该语句显着提高了过程的性能(并且恢复它会大大减慢它;即,SELECT stmt 绝对是罪魁祸首)。

上面的代码是实际代码的改编/简化版本。请注意,我已经尝试过重新编译过程、更新统计信息等。

我不知道为什么 Sybase ASE 只会在字符串被硬编码时选择索引,而在从另一个表中选择时选择表扫描。有人请给我一个线索,并提前谢谢你。

0 投票
2 回答
356 浏览

mysql - mysql分区

只是想验证一下,数据库分区是只在数据库层面实现的,当我们查询一个分区表的时候,我们还是做正常的查询,我们的查询没什么特别的,解析查询的时候自动进行优化,对吗?

例如,我们有一个名为“address”的表,其中包含一个名为“country_code”和“city”的列。所以如果我想获得美国纽约的所有地址,通常我会做这样的事情:

如果现在该表按“country_code”分区,并且我知道现在查询将仅在包含 country_code = US 的分区上执行。我的问题是我需要在我的 sql 语句中明确指定要查询的分区吗?还是我仍然使用前面的语句,数据库服务器会自动优化它?

提前致谢!

0 投票
2 回答
1148 浏览

hibernate - 数据库设计以加快大型数据集的休眠查询

我目前有下表表示在休眠中映射的总线网络,从基于 Spring MVC 的公交路线规划器访问我试图让我的路线规划器应用程序执行得更快,我将所有上述表格加载到列表中以执行路线规划器逻辑.

如果有人对如何加快我的表现有任何想法或对另一种方法来解决处理大量数据的问题有任何建议,我将不胜感激

这是从每个表中加载所有数据所需的时间:

休眠注解

HashMap -> CoodinateID 到坐标代码

0 投票
2 回答
422 浏览

ruby-on-rails - Ruby on Rails“has_many”数组是否在“需要知道”的基础上提供数据?

例如,在 Ruby on Rails 上,如果 Actor 模型对象是 Tom Hanks,而“has_many”粉丝是 20,000 个 Fan 对象,那么

给出一个包含 20,000 个元素的 Array. 可能,元素没有预先填充值?否则,从数据库中获取每个 Actor 对象可能会非常耗时。

所以它是在“需要知道”的基础上吗?

那么访问actor.fans[500]时是否拉取数据,访问actor.fans[0]时是否拉取数据?如果它从每条记录跳到另一条记录,那么它将无法通过执行顺序读取来优化性能,这在硬盘上可能会更快,因为这些记录可能位于附近的扇区/盘片层——例如,如果程序接触 2 个随机元素,那么仅读取这 2 条记录会更快,但是如果它以随机顺序接触所有元素,那么仅以顺序方式读取所有记录,然后处理随机记录可能会更快元素。但是 RoR 怎么知道我是只做几个随机元素还是随机做所有元素?

0 投票
4 回答
1132 浏览

rdbms - 什么是用于归档的好的 DBMS?

几年来,我一直被困在 MsSql/MySql 的世界中,我决定进一步扩展我的翅膀。目前我正在研究哪个 DBMS 擅长归档数据时所需的东西。例如。大量写入和低读取。

我已经看到了 NoSQL 十字军东征,但我有一个非常 RDBMS 的心态,所以我有点怀疑。

有人有什么建议吗?甚至任何指向此类东西的基准等的指针。

谢谢 :) 托马斯


编辑

既然有一个问题,我会尝试提供更多关于我在想什么的信息

我将在几台服务器上运行一项服务,这些服务器都将拥有它们的本地数据库。这些数据库将有大量的命中(1/1 读/写),所以我试图让它们尽可能地为空,以缩短查询时间。我最初的估计是该数据库中的任何行都不会超过 30 分钟。在这些服务中的每一个上运行一个归档数据库似乎是一种资源浪费,因此中央归档架构看起来更好。

我将尝试建立一个快速的网络架构

您可能知道,MsSQL 和 MySQL 仅在处理写入时垂直扩展(不确定它是否是 rdbms 的东西)。因此,我正在研究尽可能从该存档 DBMS 中获得最大性能。

0 投票
9 回答
39871 浏览

database - 多少列是太多列?

我注意到这里的很多人都引用了一张表中有 20 多列(我见过多达 55 列)的表。现在我不假装自己是数据库设计专家,但我一直听说这是一种可怕的做法。当我看到这一点时,我通常建议拆分为具有一对一关系的两个表:一个包含最常用的数据,另一个包含最不常用的数据。虽然同时,可能存在性能问题(更少的 JOIN 等)。所以我的问题是:

当涉及到真正的大型数据库时,拥有大量列实际上是否有优势,尽管这通常会导致许多 NULL 值?

哪一个对性能的影响更大:很多列有很多 NULL,还是更少的列有很多 JOIN?

0 投票
6 回答
3000 浏览

mysql - 哪个数据库 (DBMS) 可以最好地处理大型表?

在 SQL Server(2008 R2 开发人员版)中也有一个非常大的表,它存在一些性能问题。

我想知道另一个 DBMS 是否更适合处理大表。我主要只考虑以下系统:SQL Server 2008、MySQL 和 PostgreSQL 9.0。

或者,正如上面提到的问题所暗示的那样,表大小和性能主要是索引和缓存的一个因素吗?

此外,更大的标准化会提高性能还是阻碍性能?

编辑:

下面的评论之一声称我含糊不清。我有超过 2000 万行(20 年的股票数据和 2 年的期权数据),我正在尝试找出如何将性能提高一个数量级。我只关心读取/计算性能;我不在乎写性能。唯一的写入是在数据刷新期间,并且是 BulkCopy。

我已经有一些索引,但希望我做错了什么,因为我需要加快速度。我也需要开始查看我的查询。

提供的评论和答案已经帮助我了解如何开始分析我的数据库。我是程序员,不是 DBA(因此Marco 的书推荐是完美的)。我没有那么多数据库经验,而且我以前从未分析过数据库。我会尝试这些建议并在必要时报告。谢谢!

0 投票
1 回答
717 浏览

postgresql - Postgresql 自定义函数慢,php 但如果使用带有 gin 索引的文本搜索直接在 psql 上输入则速度快

我有 3 个表 Person、Names 和 Notes。每个人都有多个名字并有可选的注释。我在名称和注释的某些列上进行了全文搜索(见下文),如果我搜索的单词在结果集中或在 db 中,它们工作得很好,这是针对自定义函数、php 和 psql。现在的问题是,当数据库中不存在我搜索的单词时,查询在 php 和自定义函数中变得非常慢,但在 psql 上仍然很快。在 psql 上小于 1 秒,其他则超过 10 秒。

表:

除了 PK 和 FK 索引,fs_name 和 fs_note 上的 Gin 索引。

功能/查询

where 条件在这里被削减,例如,如果我在 $1 上执行 'john & james' 并且数据在 db 上,那么结果很快,但如果 'john and james' 不在 db 中,则速度很慢。这变慢了,因为我有 1M 的人记录和 3M+ 的名字(所有虚拟记录)。关于如何解决这个问题的任何想法?我尝试重新启动服务器,重新启动 postgresql。

0 投票
3 回答
1445 浏览

sql - mysql简单汇总子查询结果很慢

我正在尝试根据购买的商品数量对所有客户进行“分类”,并显示每个分类的数量。我试图查看有多少人(account_id)购买了一件商品,有多少人购买了两件商品,一直到九件商品,然后是十件或更多。

这是我正在使用的查询 - 对于它的价值,我希望查询对销售进行全表扫描以生成结果,但整个过程需要永远!

我来自 Oracle 背景,我像在 Oracle 中一样编写查询。

mysql 在处理子查询时有什么陷阱吗?

解释计划

0 投票
5 回答
1246 浏览

mysql - MySQL - 如何有效地获取 ID 最低的行?

ORDER BY id LIMIT 1有没有比在以下查询中使用更快速的方法来更新与特定条件匹配的 MySQL 表的最旧行?

笔记:

  • 假设主键是id并且在 上也有一个索引field1
  • 我们正在更新一行
  • 我们不是严格更新最旧的行,而是更新与条件匹配的最旧的行。
  • 我们要更新最旧的匹配行,即最低的id,即 FIFO 队列的头部。

问题:

  • ORDER BY id必要吗?MySQL默认如何排序?

现实世界的例子

我们有一个用于电子邮件队列的数据库表。当我们想要将电子邮件排队发送给我们的用户时,会添加行。行由 cron 作业删除,每分钟运行一次,在那一分钟内处理尽可能多的行,每行发送 1 封电子邮件。

我们计划放弃这种方法,使用GearmanResque 之类的工具来处理我们的电子邮件队列。但与此同时,我有一个问题,我们如何有效地标记队列中最旧的项目以进行处理,也就是 ID 最低的行。这个查询完成了这项工作:

但是,由于缩放问题,它经常出现在 mysql 慢日志中。当表有 500,000 行时,查询可能需要 10 秒以上。问题是该表自首次引入以来已经大幅增长,现在有时有 50 万行和 133.9 MiB 的开销。例如,我们每天可能插入 6000 条新行 180 次并删除大致相同的数量。

为了停止出现在慢日志中的查询,我们删除了ORDER BY id以停止整个表的大量排序。IE

...但是新查询不再总是获取具有最低 id 的行(尽管它经常这样做)。除了 using 之外,是否有更有效的方法来获取具有最低 id 的行ORDER BY id

作为参考,这是电子邮件队列表的结构: