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

sql - SQL查询性能说明

我有这个查询(当然还有跨表的几个连接和一些视图,为了简单起见,我将它们称为 x)。

  1. 案例 1:select * from x -> 在 10 秒内返回,仍然可以接受,连接和大量数据相当繁重
  2. 案例2:select * from x where userid = 1->在0-1秒内返回,足够好
  3. 案例 3:使用 SP:if @userid = -1 select * from x else select from x where userid = @userid -> 现在使用参数用户 ID 1 调用 sp 应该在 0-1 秒内返回,因为它应该与案例 2 相当,但实际上它在 10 秒内返回。

    现在,参数屏蔽 OR WITH RECOMPILE on sp OR OPTION (recompile) on query with where 子句没有帮助,使 SP 运行得更快的userid = something原因是将 OPTION(recompile) 放在 SP 的第一部分,即在没有 where 的查询上条款。:

  4. 案例 4:使用 SP:if @userid = -1 select * from x option (recompile) else select * from x where userid = @userid

有什么解释吗?

我可以猜到它使用基于查询的优化而没有 where 子句,即使是带有 where 子句的查询,但这是为什么呢?

0 投票
3 回答
1344 浏览

mysql - 优先从mysql数据库中删除重复索引

我正在制定一个优化我的数据库索引的程序,这将花费我很长时间。所以我想确认这样做是否可行?并没有已经完成,否则想要得到它。

  1. 我想从所有表中读取所有索引。
  2. 我想删除作为主键的字段的所有其他索引
  3. 做完以上。仍被索引为唯一的字段。我想删除所有其他索引
  4. 既不是主要的也不是唯一的字段。我只想在每个索引上保留一个索引并删除所有其他索引

我很好奇为什么MYSQL允许主键字段上的唯一索引?它可以产生任何有用的差异吗?

问题:我需要指导/查询/程序来删除所有无用的索引以及我上面提到的 4 点中提到的层次结构

更新 1:我将在 SQLFiddle 上更新我的工作。目前它才刚刚开始。但是,您可以在此链接上看到有四个字段和 8 个索引。我只想要其中的 3 个,而放弃所有其他的。我只需要第一,第三和第四。根据我以上4点。

更新 2:我得到了 eggayal 的出色回答。他给出的第一个链接是纯sql解决方案。我在 Link2尝试过。它给了我不想要的输出。可以通过在此处查看 Link1来比较 link2 的输出

期望的输出是

Link2中查询输出的错误

auth_id_4第 1 行:auth_id 未显示为冗余索引,因为它与同一字段上的唯一键无关(比较) 。但我需要它,因为当同一列也有唯一索引时我不需要这个索引

Row2 :当某些列上存在主键索引时,我想说所有其他索引都是多余的

第 3 行:好的

0 投票
1 回答
438 浏览

mysql - MySQL插入,重更新,按索引排序

我目前正在设计一个数据库,该数据库具有一个events插入(和更新)大量的表(我预测每分钟插入 1,000 到 5,000 次),但也需要按日期排序。

每个事件都有一个read布尔字段 ,并按(datetime)user_id排序。选择语句将类似于updated_atDESC

现在,我正在考虑在 、 和 上使用索引readuser_id优化updated_at获取和排序,但这是否意味着整个索引将在

?

在这种情况下,性能效率最高的(插入、更新、选择)解决方案是什么?

0 投票
2 回答
1241 浏览

mysql - 使用重连接优化 MySQL 查询

我目前运行一个网站,该网站在列表中跟踪最新的分数和评级。该列表有数千个经常更新的条目,并且该列表应该可以按这些分数和评级列进行排序。

我获取此数据的 SQL 目前看起来像(大致):

表格在哪里(简化):

大约有 300,000score_adjustments个条目,并且它们以每天大约 5,000 个的速度增长。大约是那个的rating_adjustments1/4。

现在,我不是 DBA 专家,但我猜打电话SUM()总是AVG()不是一件好事——尤其是当sa包含ra数十万条记录时——对吧?

我已经对查询进行了缓存,但我希望查询本身快速 - 但仍尽可能保持最新。我想知道是否有人可以分享任何解决方案来优化像这样的繁重的连接/聚合查询?如有必要,我愿意进行结构性改变。

编辑 1

添加了有关查询的更多信息。

0 投票
2 回答
364 浏览

database - 具有大数据列的单表或多表哪个更有效?(休眠 - 数据库)

我的 Web 应用程序是在 Grails 中实现的。

我的情况是我有一个包含更多列的域类(休眠类),其中一些是大字符串,最多 4000 个字符。

例如 :

现在我必须为这些元素实现一个多语言数据库,我的策略是为每种语言设置一个字段。

我的问题是,如果我为每种语言都有一个单独的表,或者将它保存在一个大表中,是否会更有效。这个问题有两个部分。首先,如果它在加载数据时使用大内存,那么对于hibernate,哪个更有效,第二,对于数据库,哪个更有效?

以后我可能会拥有超过 10 种语言。

0 投票
1 回答
879 浏览

image-processing - 将描述符与描述符数据库匹配

我正在尝试找到一种快速匹配数据库中描述符的方法。我的程序按以下方式工作:

1) 使用图像描述符填充数据库(使用适当的特征检测算法)

2)加载图像

3) 提取该图像的描述符并将其与数据库中的所有描述符进行比较,以便找到合适的匹配项。

可以想象,计算 32 个描述符的数百万次比较是非常繁重的。我使用了一个散列函数,但它只适用于两个完全相同的描述符,因此只匹配两个完全相同的图像。

你建议我用什么来加快搜索速度?

干杯

编辑:

我决定从使用神经网络解决方案开始。对于任何想要开始研究该主题的人来说,这是一个 非常好的链接。

0 投票
1 回答
60 浏览

php - 如何在mysql中制作这种表?

在我的系统中,我有两个用户:

  • 请求发件人
  • 用户收到请求

我想创建我的数据库表 

如果我有 100 个用户并且我只发送三个请求只会是这样的 

这将仅为 3 个请求为 100 个用户插入 300 条记录,这不是最佳的。

以最佳方式创建数据库的最佳方式是什么?

0 投票
2 回答
822 浏览

sql - SQL - 将计算值(基于子表)存储在列中或在数据模型中计算?

我遇到了一个小难题,我希望 SO 社区可以帮助我解决这个问题。

我目前处于一种情况,我们正在为订单折扣编写自定义逻辑,这些逻辑基于可配置的规则。以下是最简单的表格:

命令

订单折扣

折扣

我们正在使用实体框架(但这个问题可能适用于任何数据模型)。我觉得我的选择很简单,但都有各自的缺点:

  1. 在我的 SQL订单中添加一列“折扣”表中缺点:每次更新订单时,我们都需要记住重新计算折扣并更新此列。这可能会导致数据不一致,但性能会更好。还将允许覆盖折扣金额。
  2. 将“折扣”属性添加到我的订单数据模型代码中。缺点:任何时候访问此属性都需要计算,但总是准确的。

我应该走哪条路线,为什么?

0 投票
1 回答
3040 浏览

sql-server-2008 - 如何使用庞大的日志文件优化 Sql Server 数据库

我有一个大小为 1677,25 MB 的 sql server 数据库。这是我的详细数据库大小信息:

数据库大小:1677.25 MB
未分配空间:343.09 MB

保留:24488 KB 数据:18560 KB 索引大小:2632 KB 未使用:3296 KB 行数:74410

所以,正如你所看到的,它并不是那么大的数据库。问题是,日志。

日志文件大小:1.311 GB

如何清理旧日志?好吧,也许过去 3 个月很重要,但 1.3 GB 确实是一个重要的大小。

0 投票
1 回答
187 浏览

database - 哪个更好 ?数据访问速度较快的冗余,或无冗余和数据访问速度较慢的冗余

我想为论坛网站创建一个数据库...

论坛网站的所有用户都将存储在一个名为 USERS 的表中,其中包含以下字段:

将有一个名为 FORUMS 的表,其中包含以下字段:

对于创建的每个论坛(对于 FORUMS 表中的每一行),都会有一个名为 "forum_ID"_replies 的单独表,其中该论坛的确切 forum_ID 将在引号内替换......
因此,每个论坛将有一个单独的表格,其中将保存该特定论坛的所有回复......

“forum_ID”_replies 表中的字段是

我希望我的设计清楚......现在,我的疑问是

我将 user_name 保存为每个 "forum_ID"_replies 中的字段之一。但是,我认为 user_name 可以使用 user_ID 从 USERS 表中引用(或访问),而不是将其存储在每个“forum_ID”_replies 表中。以这种方式,减少了冗余。

但是,如果在每个表中都存储了 user_name,则对 user_name 的搜索将会减少,并且可以更快地显示结果。

哪个更优?

存储名称及其 ID 以加快访问速度,还是仅存储 ID 以避免冗余?