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

php - MYSQL 数据库优化使用索引

我在LearnBiz Si​​mulations工作,这是一家自筹资金的初创公司,为管理教育领域进行模拟。

(a) 我们的网站目前为大约 16,000 人提供服务。目前,数据库大小为 30 mb,总共大约 90 个表,每个表可能有 5 到 50 列。我们在数据库中的所有表,都反复有新的插入、删除或更新行。但从未添加任何列。使用索引技术是否会产生任何问题?还有一些其他论坛和视频表明,即使插入或删除一行也会使索引变得无用!

(b) 我们网站上的最大工作是 mysql 查询,对 200-800 行之间的代码行进行一些处理。几乎 95% 以上的查询都有多个相等 where 子句,以查明所需的行。如果我理解正确,那么使用索引将帮助我们将流程加快几倍?

(c) 有一些模拟每分钟处理许多参与者的数据。对于此类模拟,目前我们甚至无法同时满足 50 名参与者的需求。采用索引是否有助于此类模拟承载更多用户?

(d) 我们目前拥有的服务器是带有 GoDaddy 的 VDS(每年费用约为 400 美元)。为了让我们的网站更快,我们转向 DDS(每年花费大约 3000 美元)或使用 TokuDB 之类的东西是否有意义?有没有办法判断当前系统的用户容量,即服务器+数据库+编码?

0 投票
1 回答
109 浏览

mysql - 数据库设计 - 如何构建

目前,我有一张桌子,而且它的填充速度非常快。我有 50 台设备。我每 30 秒从每个设备收集一次数据。因此,在我们添加 10,000 台设备后,它们每月将生成 876,000,000 条记录——这非常多!

这是我的人际关系

我面临着非常复杂的查询和报告,当我这样做时,我们的系统没有响应并达到执行超时。(这是超过 200 万条记录)

我需要重新思考和重新实现数据库结构。目前我正在考虑

  • 为每个单元创建新表
  • 为每个月的每个单位创建新表

你有什么建议?

0 投票
2 回答
170 浏览

database - 我们应该将 HTML 字符串的文本和标签存储到 1 个相同的列还是 2 个单独的列中?

我想将以下 HTML 字符串存储到 DB<b>This</b> is <i>my text</i>中。这个 Html 字符串有 2 个部分:

  • 文本:“这是我的文本”
  • 标签:<b>, </b>, <i>,</i>

在我看来,有 2 个选项可以存储上述 Html 字符串。

  • 选项 1:将文本和标签存储到 1 个相同的列中,因此 TextTag 列将具有<b>This</b> is <i>my text</i>.

  • 选项 2:将文本和标签存储到 2 个单独的列中,因此文本列将具有“这是我的文本”并且标签列将具有<b>x</b> x <i>x x</i>

选项1和2的优点和缺点是什么。

我认为,选项 1 很容易编码,但是当我们执行搜索功能时会很困难,因为我们不需要搜索标签部分,所以我们必须在搜索中使用某种正则表达式,这可能会减慢查询速度。

另一方面,选项 2 更难编码,因为我们必须将 Tag 列映射到 Text 列,但搜索起来很容易,因为我们不必在搜索中使用 Regex。此外,选项 2 比选项 1 花费更多的流量,因为他的查询中有一些额外的“x”。但我相信选项 2 比 1 更安全,因为我们只在主字段中存储文本而不是 html,因此它可能更安全。

如果您是 DB 专家,那么您的决定是什么?

0 投票
1 回答
802 浏览

mysql - 数据库索引在父子表中是否起任何重要作用?

看看第一个场景,你有一个有 2 列的表 - 父 (P) 和子 (C)。

当用户搜索“1”的所有后代时,它将显示:

& 当用户搜索“2”的所有后代时,它将显示:

这是获取数据的 Mysql 查询

好的,您知道数据库索引是对列进行索引,以便数据库可以比没有索引更快地查找数据库。

但是,在上面提到的第一个场景中,“您认为 DB 索引在父子表中起重要作用吗?”

好的,如果用户搜索“2”的所有后代,那么数据库首先找到“2-8”,那么它必须跳过2条记录才能找到下一个孩子“8-7”。

这是一个简单的例子,但是如果有数千条记录彼此相距很远(或者数据的位置非常碎片化),那么“DB(假设父子列被索引)如何查找数据在第一种情况下很快?”

但是,如果我们让所有后代像在第二个场景中一样坐在一起:

那么“DB(即使我们不索引父子列)在第二种情况下查找数据的速度是否比第一种情况快?”

注意:如果你像这样颠倒后代的顺序:

& 如果你搜索“1”那么它只会显示“3”,它不会显示“3-6”和“6-4”,因为“3-6”和“6-4”不是连续的命令。这意味着MYSQL在运行上述查询时,将从上到下搜索记录。所以就意味着Mysql不会从头开始搜索下一个后代,-> 你这么认为吗?

注意:请阅读此链接@Symbol - Mysql 中递归 SELECT 查询的解决方案?

0 投票
1 回答
741 浏览

mysql - 在Mysql中进行修改记录的并发控制最优雅的方法是什么?

好的,看看这个场景,我得到了一张表,用户可以在其中同时修改许多行。我希望当有人修改记录时,其他人不能修改相同的记录。例如,table1 有 3 列(ID、文本、标志):

我对 Mysql 中的并发控制进行了一些研究,人们建议的第一个解决方案是使用SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE在 Mysql 中。但是,此解决方案有一个限制,即您必须在选择记录后立即更新。例如:

但是,我的应用程序要求用户将数据下载到 Gui,然后用户在提交更新之前可能会花费大量时间来处理该数据。

还有第二种方案,Mysql 提供了 Row Lock 机制,但是这种方案需要使用 InnoDB,开销很大。

另一种选择是在mysql中使用表锁,开销很低,但我们不能锁定整个表几个小时,对吧?例如,用户A可能将记录1修改为10,用户B可能同时需要将记录11修改为20,所以用户B不要等到用户A修改完成。

在我看来,我想要一个“标志”列,当用户A正在修改一些记录时,这些记录的标志将变为1,如果用户B想要修改相同的记录,系统会弹出消息说有人是修改它。当用户 A 完成时,它会将标志变为 0,并且用户 A 可以修改这些相同的记录。

但是这个方案有个复杂的问题,如果用户A忘记保存数据怎么办?如果发生这种情况,那么标志永远是 1?那么标志应该在几个小时后过期?& 怎么做?

也许我们需要时间戳或某种机制让标志在一定时间后变回 0?但这比我想象的要复杂。我们不能让数据库每 1 小时检查一次标志的时间戳吗?

--> 我不确定这是否是最优雅的解决方案?我在 DB 设计方面没有商业经验,我想知道 DB 人员如何在商业环境中管理这个问题?

你能找到比上述所有解决方案更好、更优雅的解决方案吗?

0 投票
2 回答
10782 浏览

mysql - 在 magento 的慢查询日志中为 long_query_time 设置的理想值是什么?

为了优化 magento,我们在 mysql 中启用了慢查询日志。

query_long_time 的理想值是什么,尤其是对于 magento?

0 投票
1 回答
1054 浏览

asp.net - 在实体框架中使用单个数据库调用获取多个表

我是 ASP.NET MVC 和实体框架的新手。以前我曾经使用 ADO.NET 数据表和数据集。因此,在单次调用从数据库中获取多个表的场景中,我曾经使用 DataSet。例如

在 C# 上,我曾经做过

现在,如果我想在 Single Db Call 中使用 Entity Framework 的多个表,我该怎么做?

0 投票
1 回答
1197 浏览

mongodb - MongoDB - 地理空间交叉点性能

我们正在开发一个小工具,允许人们在谷歌地图上绘制多边形,它会返回与绘制的覆盖重叠的邮政编码。我认为这将是深入研究 NoSQL 数据库的好时机,因为在处理大量数据时我听说过有关性能的好消息。

因此,我从美国人口普查 2010 数据集中获取了所有 ZCTA(邮政编码制表区)形状数据,并将其加载到 MongoDB 中,如下所示。样本文件:

我还在 Polygon 列上设置了一个索引,如下所示:

最后,我将 google 多边形中的点转换为另一个 GeoJSON 多边形,并使用 $geoIntersects 查询数据,如下所示:

当覆盖多边形很小时,这很有效,但是当多边形跨越几个州(美国)时,查询需要永远(> 20 分钟!)。我怎样才能把它降低到一个更合理的响应时间?我已经索引了邮政编码多边形,因为这就是我要查询的全部内容,所以我认为这将尽可能优化。我索引不正确吗?

提前致谢!

0 投票
1 回答
114 浏览

django - Django - 显示结果信息,同时使用具有多个外键关系的模型优化数据库查询

因此,我正在尝试整理一个网页,但我目前无法在我整理的 Web 应用程序中为每个用户整理一个结果页面。

这是我的模型的样子:

我不知道我的模特关系是否理想,但我觉得这很有意义。因此,每个用户都可以有多个与之关联的Auto对象。并且每个Auto可以有多个与之关联的FaultInstance对象。

在结果页面中,我想列出用户在其Autos中拥有的所有FaultInstances。在每个列出的FaultInstance下,我将列出用户拥有的所有有故障的汽车及其信息(这就是我的想法)。

按严重性排序的所有FaultInstance列表(从大到小)

显然,以正确的方式做事意味着我想在 Python/Django 方面做尽可能多的列表创建,并避免在模板中做任何逻辑或处理。我可以使用模型管理器为每个严重性创建一个列表,如下所示:

我仍然需要指定每个严重性,但我想如果我只有 5 个严重性级别,我可以为每个严重性级别创建一个列表并将每个单独的级别传递给模板。对此的任何建议表示赞赏。然而,那不是我的问题。我现在的停止点是,我想在他们的报告顶部创建一个汇总表,它可以为用户提供每个品牌|型号|年份的故障实例细分。我想不出传递给模板的正确查询或数据结构。

摘要(具有以下列标题 的所有FaultInstances表):

这将让我知道品牌或型号或年份的指标(在下面的示例中,它根据型号分离故障)。我列出FaultInstances是因为我只列出了连接到用户的故障。

例如

我是一个完美主义者,我想在优化数据库查询的同时做到这一点。如果我可以在我的原始查询中创建一个可以在模板中轻松解析的数据结构,并且仍然在我的报告中获得这两个部分(可能是 defaultdict(list) 的 defaultdict),这就是我想要做的。感谢您的帮助,希望我的问题是彻底且有意义的。

0 投票
2 回答
571 浏览

postgresql - 为表指定架构名称会影响性能吗?

免责声明:这不是为了优化,只是出于好奇。

我想知道这是否:

不知何故快/慢于

或者是否有其他一些暗示可能建议在每个查询中指定(或不指定)模式。

我做了一些(很少)测试,我看不出在速度方面有什么不同。