问题标签 [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.
database - 我如何知道何时索引列以及使用什么索引?
在各种 ORM 的文档中,他们总是提供一种创建索引的方法等。他们总是提到确保创建适当的索引以提高效率,就好像这是需要使用非手写 SQLer 的固有知识甲骨文。我对索引(PK之外)的理解基本上是:如果您打算LIKE
根据列的内容进行查询(即搜索),则应该对该列使用全文索引。关于索引(主要与效率有关),我还应该知道什么?感觉自己家门口有个知识的世界,但是下面塞了一个巨大的折叠鼠标垫,进不去(不知道为什么觉得有必要这么说,但是感谢您提供沙发)。
google-app-engine - GAE Datastore 是否支持 Eager fetching?
假设我想显示书籍及其作者的列表。在传统的数据库设计中,我会发出一个查询来从Book
表和相关Author
表中检索行,这一步称为eager fetching。这样做是为了避免可怕的N+1 选择问题:如果Author
记录被延迟检索,我的程序将不得不为每个作者发出单独的查询,查询的数量可能与列表中的书籍一样多。
Google App Engine Datastore 是否提供了类似的机制,还是 N+1 选择问题在此平台上不再相关?
database - 最佳数据库结构 - 具有空字段或更多表的“更宽”表?
我需要将其他数据放入数据库中,并且可以选择修改现有表 (table_existing) 或创建新表。
这就是 table_existing 现在的样子:
选项 (A)
选项 (B)
上下文:SP、SV 的组合决定了将要填充的字段的“数量”。例如,(XX, 1) 有 2 个字段。(YY, 2) 有 3 个字段。
如果我选择选项 (A),我将在“更宽”表中有许多空/NULL 值。
如果我选择选项(B),我基本上会创建更多的表......一个用于 SP、SV 的“每个”组合 - 总共可能有 4-5 个。但是每个都将完全填充正确数量的字段。table_existing 也将被更改。
从速度的角度来看,更优化的数据库结构是什么?我认为从可维护性的角度来看,选项(B)可能会更好。
编辑1
这两个选项都不是我的应用程序中最关键/最常用的表。
在选项(B)中,数据被拆分后,根本不需要加入它们。如果我知道我需要 XX_1 的字段,我会去那张桌子。
我试图了解拥有一个包含许多未使用值的大表与将相同的数据拆分到更多数量的表中是否有利弊。更多的表是否会导致数据库性能下降(我们已经有大约 80 个表)?
php - 以下哪个 SQL 查询会更快?连接两个表或连续查询?
我这里有两张桌子:
在哪里ITEMS.OWNER = USERS.ID
我列出了这些物品及其各自所有者的姓名。为此,我可以在两个表上使用连接,或者我可以选择所有项目并循环通过它们进行 sql 查询以检索该项目所有者的元组。这就像:
1 个带有 JOIN 的 sql 与 1x20 个单表 sql 查询
就速度而言,哪种方法更好?谢谢
sql-server - 需要的建议:大型数据库的 SQL Server 数据库架构
大家好!
我的客户目前有一个 SQL Server 数据库,它每天执行 3-4 百万次插入,每天的更新次数和读取次数更多。当前数据库的布局很奇怪,恕我直言:传入的数据进入“当前”表,然后每晚的记录被移动到相应的月度表(即 MarchData、AprilData、MayData 等),它们是当前表的精确副本(模式方面我意思是)。读取是从所有月表和当前表的 UNION 视图中完成的,插入和更新仅对当前表进行。有人向我解释说,将数据分成 13 个表的动机是,所有这些表都使用单独的数据文件,并且这些数据文件被写入 13 个物理硬盘驱动器。所以每个表都有自己的硬盘驱动器,据说可以加快视图性能。我什么
我想知道这种方法真的是最好的方法吗?或者我们可以考虑不同的方法吗?请注意,该数据库大约为 300-400 GB,并且每天以 1.5-2 GB 的速度增长。每隔一段时间,我们就会将超过 12 个月的记录移动到单独的数据库(存档)中。
任何见解都受到高度赞赏。
sql - 优化比较不同数据库中具有相似架构的两个表的查询
我在不同的数据库中有两个具有相似架构的不同表。比较这两个表之间的记录的最佳方法是什么。我需要找出第一个表中存在的记录,其对应的记录在第二个表中不存在,从第一个表中过滤记录,并带有一些 where 子句。到目前为止,我已经有了这个 SQL 结构:
有一个更好的方法吗?
上面的查询看起来不错,但我怀疑它是在不评估查询第一部分中的条件的情况下进行逐行比较,因为查询的第一部分会大大减少结果集。这发生了吗?
php - 2关于更好地优化数据库设计的问题
1) 在 mysql 引擎中,MyISAM 更好还是 InnoDB 更好?
2)我想编写一个可以添加多类别帖子的cms 我必须如何设计我的数据库以通过一些查询获得更好的性能?
在 php 中,如何列出例如 = 1 的帖子?
谢谢你
mysql - MySQL 使用 cron 作业或使用视图创建表
我有许多复杂的查询,其结果存储在 MySQL 视图中。问题是 MySQL 视图在性能方面受到影响。
我设置了一个 cron 作业来填充一个标准表,其中包含与视图填充相同的数据:
现在,在对 cron 填充的user_reports
表进行查询时,与等效视图相比,查询时间几乎是查询时间的十分之一。
这是一种常见的方法吗?显然,每次运行 CRON 作业时服务器都会有一些负担,这意味着数据无法实时获得。
查询时间
user_reports
= 0.002 秒
查询时间view_user_reports
= 0.018 秒
综上所述,也许一个需要 0.018 秒才能运行的查询应该从应用程序代码中运行,而不是存储在视图中?尽管我认为它的扩展性不如 cron 驱动的方法。
mysql - mysql优化
我正在运营一个网站,我已经在网站上吸引了很多用户。现在我面临的问题是传入和传出消息只有一个表。当这个消息表的大小达到两百万以上时,网站变得非常缓慢。
请告诉我这个问题的解决方案是什么?
我的网站是向巴基斯坦发送短信
我的服务器配置是 1 GB 内存 786 ghz 处理器 200 GB 硬盘
mysql - 值得在列上添加索引只是为了使它们成为外键吗?
我的数据库中有一个invitations
表,它有一个from
和to
列,它们都是userId
我users
表中列的外键。
例如,如果用户#1 邀请用户#2 做某事,那么在invitations
表中,from
将是 1,to
将是 2。
我将to
在 where 语句中使用该列,例如:
但是该from
列永远不会在 WHERE 语句中使用。
根据我的阅读,您应该只在将在 WHERE 语句中使用的列上添加一个索引,但是我也读过您应该始终创建外键。
from
仅仅为了添加外键而创建索引对我来说有意义吗?