注:这个问题可以回答保持MySQL
或MSSQL
RDMBS记住的性能提升选择数据库非规范化的报告
背景:
- 比方说你有一个名为
records
表。该表有20个字段,其中一些是VARCHAR(255)
。 - 您必须在名为
amount (FLOAT)
和status (INT)
的两个字段上运行报告。 - 由于一条记录只能有一个状态,所以它保存在同一个表中。
- 表格索引在
status
和amount
上。
现状:
索引好的工作,甚至有超过10万条记录的分组基于这两个领域是可以接受的响应时间。 然而,随着数据的增长,索引的效率正在降低,因为RDBMS仍然需要解析所有这些数据子集,而不仅仅解析这两个字段。即使使用适当的索引,这也会导致报告速度变慢和变慢。
问:
虽然量有一对一的关系与记录,它并没有真正意义投入量和状态在一个单独的表非常久远的记录ID外键,但是,你认为即使它变得不那么标准化,它会使它更有效率吗?
为什么我会问这个问题?
因为它听起来像是简单的逻辑,我认为,如果我有一个单独的表中包含一个记录ID和相应的金额,然后当我运行的量和状态的一些报告,然后他们会比当前设置因为快得多数据库现在需要查看更少的数据和更少量的数据必须通过数据总线等,并且所有那些不需要计算报告的字段都不会在操作系统级别解析数据。我知道当我运行一个关于数量和状态的报告时,数据库不会关心存储在其中的其他字段和值,但仍然必须读取所有这些数据子集才能解析记录,并且在磁盘级别仍然结果为reads
。
你能否提供你正在运行一个报告查询和创建表输出的一个例子,我们可以看到当前的指标是什么样子? –
在反规范化数据库之前,您可以尝试几件事情。 1)将固定长度的字段移动到行的前面,将你的变量移动到行的末尾。 2)只选择状态和金额,而不是整行。 –
@GilbertLeBlanc谢谢,它非常有趣,知道如果这些可变长度字段移动到末尾很重要 –