提取大量数据花费的时间太长。需要一种加快速度的方法

时间:2019-07-01 16:04:37

标签: sql sql-server database

我正在创建一个客户端仪表板网站,该网站显示数据库中数据的许多不同图形和图表。

数据是医疗患者及其为保险目的而工作的公司的记录。数据显示为汇总图表,但是页面上具有过滤器功能,用户可以使用该功能来过滤单个患者记录。他们可以过滤的字段是

  • 医疗索赔的日期范围
  • 与保险持有人的关系
  • 性别
  • 雇主组(用户选择与他们一起使用的许多不同的组,并可以在过滤器中将其打开和关闭)
  • 用户列表(站点的用户可以创建患者的任意列表,并保存其ID并在以后进行编辑)。可以选择一个,一个或多个列表。如果选择了多个,则还有一个“任意/全部”选择​​器。
  • 用户可以从其他内部更结构化的数据段中定义的一组过滤器(具有默认设置)。用户最多可以自定义其中三个,并且可以选择其中之一,也可以不选择任何一个,然后返回存储在内存中的患者ID列表,直到更改为止。

问题在于,加载数据可能需要很长时间,某些页面的加载需要30秒到一分钟的时间(首先加载页面,然后通过ajax函数将数据作为JSON下载,而加载微调器是显示)。我们使用的某些存储过程非常复杂,需要多层嵌套查询。我尝试使用查询分析器来简化它们,但是我们进行了所有建议的更改,并且仍然需要很长时间。我们的数据库人员已经看过并且没有看到其他任何方法可以使查询更简单,同时仍能获得所需的数据。

现在的设置方式,仅更改日期范围,并且雇主组导致再次命中数据库。数据库从不对其他任何字段进行过滤。过滤器选择的任何其他更改都在前端进行。我尝试更改其工作方式,并将所有字段发送到后端进行数据库筛选,结果最终花费了更长的时间,更不用说每次更改都需要等待,而不仅仅是几次更改。

我们正在使用MS SQL 2014(SP1)。我的问题是,我们有什么选择来加快速度?即使这意味着完全改变我们的数据存储方式?

1 个答案:

答案 0 :(得分:0)

您没有提供任何详细信息-因此非常通用。

加快查询速度-这是最好,最简单,最不容易出错的选项。现代硬件可以处理巨大数据集,并且仍然可以提供亚秒级的响应。将您的查询,DDL,示例数据和说明发布到Stack Overflow-您很有可能会获得重大改进。

购买更好的硬件-如果您确实无法加快查询速度,请找出瓶颈所在,然后购买更好的硬件。这些天是如此便宜,以至于最大限度地利用SSD,RAM和CPU所花费的时间可能比弄清楚如何处理下面的最佳路由所花费的时间还少。

缓存-使用缓存来代替所有操作返回数据库。弄清楚仪表板的“最新”状态,数据的独特性,并尽可能缓存查询结果。许多开发框架都具有对缓存的一流支持。缓存的问题在于,它使调试变得很困难-如果用户报告错误,他们是否正在查看缓存的数据?如果是这样,则该缓存是否陈旧-是数据中的错误还是缓存中的错误?

预计算,如果缓存不可行,则可以预计算数据。例如,当您创建新的患者记录时,您可以更新“按性别划分的患者”,“按日期划分的患者”,“按保险公司的耐心”等报告。这会产生大量工作-甚至有更多的bug机会。

去规范化-这是核选项。非规范化通常以牺牲写入速度为代价,并以引入大量的错误机会为代价,提高了报告速度。