当前位置: 首页 > 面试题库 >

如何提高数据库的性能?

孟嘉歆
2023-03-14
问题内容

我在公司中多次设计数据库。为了提高数据库的性能,我只寻找标准化和索引。

如果要求您提高数据库的性能,该数据库包含大约250个表以及一些具有数百万个记录的表,那么您将寻找什么不同的东西?

提前致谢。


问题答案:

优化逻辑设计

逻辑级别是关于查询和表本身的结构。首先尝试最大程度地发挥这一作用。目标是在逻辑级别上访问尽可能少的数据。

  • 拥有最高效的SQL查询
  • 设计支持应用程序需求的逻辑架构(例如,列的类型等)
  • 设计权衡以更好地支持某些用例
  • 关系约束
  • 正常化

优化物理设计

物理级别处理非逻辑方面的考虑,例如索引的类型,表的参数等。目标是优化始终是瓶颈的IO。调整每张桌子以适应需要。小型表可以永久加载到DBMS缓存中,写率低的表可以与更新率高的表进行不同的设置,以减少磁盘空间等。根据查询的不同,可以使用不同的索引等。您可以通过物化视图等透明地对非规范化数据进行标准化处理

  • 表参数(分配大小等)
  • 索引(组合,类型等)
  • 系统范围的参数(缓存大小等)
  • 分区
  • 非规范化

首先尝试改进逻辑设计,然后再改进物理设计。(但是两者之间的界限很模糊,因此我们可以对我的分类进行争论)。

优化维护

必须正确操作数据库,以保持尽可能高的效率。这包括一些可能会对性能产生影响的维护性任务,例如

  • 保持统计数据为最新
  • 定期对关键表进行重新排序
  • 磁盘维护
  • 所有的系统内容都具有可摇动的服务器


 类似资料:
  • 我们正在快速开发一个应用程序,其中我们需要一次获取超过50K行(在应用程序加载时执行),然后数据将用于应用程序的其他部分进行进一步计算。我们正在使用Firebase实时数据库,我们面临一些严重的性能问题。 它目前需要大约40秒才能加载50K行(目前使用的是免费数据库版本,不确定这是否是原因),但我们也观察到,当多个用户使用该应用程序时,加载50K行开始需要大约1分20秒,Peak达到100%。 您

  • 主要内容:一般业务系统运行流程图,一台 4 核 8G 的机器能扛多少并发量呢?,高并发来袭时数据库会先被打死吗?,8 核 16G 的数据库每秒大概可以抗多少并发压力?,数据库架构可以从哪些方面优化?,总结今天给大家分享一个知识点,是关于 MySQL 数据库架构演进的,因为很多兄弟天天基于 MySQL 做系统开发,但是写的系统都是那种低并发压力、小数据量的,所以哪怕上线了也就是这么正常跑着而已。 但是你知道你连接的这个 MySQL 数据库他到底能抗多大并发压力吗?如果 MySQL 数据库扛不住压力

  • 问题内容: 我需要一些想法来实现Java的(真正)高性能内存数据库/存储机制。在存储20,000+个Java对象的范围内,每5秒钟左右更新一次。 我愿意接受的一些选择: 纯JDBC /数据库组合 JDO JPA / ORM /数据库组合 对象数据库 其他存储机制 我最好的选择是什么?你有什么经验? 编辑:我还需要能够查询这些对象 问题答案: 您可以尝试使用Prevayler之类的工具(基本上是一个

  • 我们创建了一个程序,以便在其他程序中更容易地使用数据库。因此,我显示的代码将在多个其他程序中使用。 其中一个程序从我们的一个客户那里获得大约10000条记录,并且必须检查这些记录是否已经存在于我们的数据库中。如果没有,我们将它们插入数据库(它们也可以更改,然后必须更新)。 为了方便起见,我们从整个表中加载所有条目(目前为120,000个),为我们得到的每个条目创建一个类,并将它们全部放入Hashm

  • 我有一个名为Emails的列族,我正在将邮件保存到这个CF中,编写5000封邮件需要100秒。 我使用的是i3处理器,8gb内存。我的数据中心有6个节点,复制因子=2。 我们存储在卡桑德拉中的数据大小会影响性能吗?影响写入性能的所有因素是什么,如何提高性能? 预先感谢..

  • 问题内容: 我有一个巨大的数据集,其中包含数千行,每个行具有大约10个字段,大约2MB的数据。我需要在浏览器中显示它。最简单的方法(获取数据,将其放入,执行其工作)可以很好地工作,但是当它开始将节点插入DOM时,它会使浏览器冻结大约半分钟。我应该如何解决这个问题? 一种选择是将行逐行追加,并等待完成向DOM中插入一个块后再移至下一个。但是AFAIK ngRepeat在完成“重复”操作时不会返回报告