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

sql - SQL Server 中有关大表管理(> 100 亿行)的一些(希望如此)基本问题

我正在为我们期望有很多行(超过 100 亿行)的表做一些表设计实验。马上想到的一些事情:

  • 在我所说的“高”表方法中,每一行将有大约 25 种“类型”中的一种,以及对应于该类型的值。我应该把它变成一种“宽方法”吗?单行包含每个类型的值的 NULLable 列?从可维护性的角度来看,这不是一个很好的方法(如果我必须添加更多“类型”怎么办),但我更关心性能,尺寸是次要考虑因素。
  • 行将有一个日期时间戳(可能是一个小的日期时间,因为我只需要分钟)。我听说在表格中使用整数表示日期时间而不是日期时间本身可能会更好。我希望这个日期时间将在查询中大量使用(甚至可能在某种程度上它是聚集索引的一部分)。

我主要关心的是查询性能,然后是大小。大量数据将被转储到表中,但不会发生太大变化或增长(可能是每天或每月更新,但不会有很多更新,也不是任何我认为是事务性的)。

0 投票
1 回答
9677 浏览

sql - SQLite:LIKE 'searchstr%' 应该使用索引吗?

我有一个包含多个字段的数据库

..和 ~150k 行。

'search_string%'由于这是一本字典,我正在使用 LIKE搜索带有掩码的单词。它过去工作得很好,需要 15 毫秒才能找到匹配的行。该表有一个字段的索引'word'。最近我修改了表(该表的某些字段超出了范围)并且发生了一些事情 - 执行查询需要 400 毫秒,所以我理解它现在无法使用索引。使用 = 而不是 like 的直接查询显示 10 毫秒的结果。有人知道这里发生了什么吗?

0 投票
1 回答
1241 浏览

solr - Solr * vs *:* 查询性能

我们正在运行 Solr 3.4,并且有一个相对较小的索引,大约有 90,000 个文档。这些文档分为多个逻辑来源,因此每次搜索都会针对特定来源应用过滤查询,例如:

wheresource是一个经典的字符串字段。我们正在使用edismax并有一个默认的搜索字段text

我们目前看到q=*平均运行时间比q=*:*. 差异非常明显,*:*需要 100 毫秒和*3500 毫秒。在文档集中搜索一个常用词(匹配所有文档的近 50%)将在 200 毫秒内返回结果。

查看启用了 debugQuery 的查询,我们可以看到它*被解析为 a DisjunctionMaxQuery((text:*)),而*:*被解析为 a MatchAllDocsQuery(*:*)。这是有道理的,但我仍然不觉得它会导致这种幅度的减速(与匹配 50% 文档的内容相比减速 2000%)。

这可能是什么原因造成的?有什么我们可以调整的吗?

0 投票
1 回答
1945 浏览

sql - SQL 联合优化为左连接,速度更快,但查询计划表示 I/O 成本更高

优化为

查询响应时间从 30 秒提高到 13 秒。

  • sql联合= 30秒
  • sql左连接= 13secs

然而,在检查查询计划时,sql union 的 I/O 成本较低,见下文:

  • sql union = 语句 1(第 1 行)的总估计 I/O 成本:6277566。
  • sql left join= 语句 1(第 1 行)的总估计 I/O 成本:10481124。

我使用的是 Sybase 12.5 ASE,查询计划来自 DBArtisan 8.5;让我知道是否需要上传整个查询计划。我对查询计划还不是很熟悉,但我在这里和那里进行 sql 优化,通常我只是基于时间改进。我还检查了两个查询的结果集是否相同(27949 行)。我还掩盖并简化了表名。

我的问题是,这是否意味着 sql left join 更快但更占用资源?如果是这样,我还应该选择更快的选择吗?

0 投票
3 回答
7404 浏览

mysql - 如何在 1 个 sql 查询中从 4 个表中获取数据?

我有以下数据库架构:

我需要制作 1 个 sql 来获得包含所有类别的课程,以及该课程的导师和该课程的订阅者数量。这可以在 1 个查询中完成吗?这应该使用存储过程来完成吗?

0 投票
5 回答
10037 浏览

java - 在 Hibernate 中通过 id 有效加载多个实体

因此,我通过 id 获得了多个特定实体的实例:

这会为每个 id 生成一个 SQL 查询,所以我想到我应该一次执行此操作,但除了运行查询外,我找不到在一次调用中获取多个实体的方法。所以我写了一个查询

但是,如果我启用二级缓存并不意味着我的旧方法将能够从二级缓存返回对象(如果它们之前已被请求),但我的查询将始终转到数据库。

这样做的正确方法是什么?

0 投票
3 回答
2776 浏览

mysql - 为什么 MySQL 不使用复合 WHERE IN 的索引?

我正在尝试通过复合索引从具有 PRIMARY KEY (a, b) 的表中获取几条记录

问题是,即使我使用 FORCE INDEX ( PRIMARY),MySQL 也没有使用索引。
EXPLAIN SELECT 显示 null possible_keys。

为什么没有可能的密钥?

通过复合键检索多行的最佳方法是什么:

  • 使用或
  • 使用 UNION ALL
  • 使用 WHERE () IN ((),())

PS 查询结果等于

谢谢

0 投票
2 回答
58 浏览

mysql - 时间变化数据的视图与表的性能

我有一个新闻文章表,其中包含作者、发布时间和每篇文章的字数。该表相当大,包含超过 100 万个条目,并且每天以 10.000 个条目的数量增长。

基于这些数据,进行统计分析,以确定特定作者在特定时间窗口(即每天每小时一个、每天一个、每个月一个)中发表的总字数一个时间跨度的平均值。这里有两个例子:

  • 作者 A 2011-11-04 发表 3298 字,前两个月平均每天发表 943.2 字(2011-09-04 至 2011-11-03)
  • 作者 B 2012-01-21 下午 1 点到 2 点之间发表 435 字,前 30 天每天下午 1 点到 2 点平均发表 163.94 字

当前的做法是通过 cron-job 在每个定义的时间窗口结束时启动一个脚本,该脚本计算计数和平均值并将其存储在每个时间窗口的单独表中(即每个小时窗口一个,一个用于每天一次,每个月一次等等……)。

总和和平均值的计算可以很容易地在 SQL 中完成,所以我认为 Views 可能是一个更优雅的解决方案,但我不知道对性能的影响。

视图是上述问题的适当解决方案吗?

0 投票
2 回答
2919 浏览

sql-server - SQL 查询 UNION 性能

更新

我认为现在问这个还为时过早。又经过几次测试,我发现性能并没有提高。我将在这里执行更多测试并发布更新。到那时,不要费心回答这个问题。

我有一个这样的查询...

这个查询需要永远运行一个相当大的数据集。我还在 Temp 表的 Id 列上添加了 CLUSTERED 索引,这带来了一些性能提升,但仍然未能完成。

我用这个替换了这个查询......

这在几秒钟内完成。有人可以解释这里发生了什么吗?

更新:我认为这两个查询是相同的。这就是我需要的。

BusinessObject_Table has following Ids: 1, 2, 3

#BusinessObject_Table has: 3, 4, 5

TempTable has rows whose Field_A values are: 1, 2, 3, 4, 6

查询的结果应该是:6(注意上面查询的变化)

我将尝试获取查询计划并将其发布在这里。

0 投票
1 回答
143 浏览

mysql - 使用索引语义确定MySql索引列中的字段是否为数字

我有一个 MySql 表,我想在其中获取给定 VARCHAR 列具有数值的行数(可以转换为数字,你知道)。现在,我正在对该字段进行简单的 REGEXP 检查。由于该表非常大,因此我使用一系列索引 REGEXP 尽可能少的行。

但是这个 VARCHAR 列也被索引了。我可以利用 MySql 索引算法的巧妙破解来扫描更少的行吗?:-/ 这是一个 InnoDB 表。