注意:MySQL
可以在记住或MSSQL
RDMBS 的情况下回答这个问题
背景:
- 假设您有一个名为
records
. 该表有 20 个字段,其中一些是VARCHAR(255)
. amount (FLOAT)
您必须在名为和的两个字段上运行报告status (INT)
。- 由于一条记录只能有一种状态,所以它保存在同一张表中。
- 表在
status
和上编制索引amount
。
情况:
索引工作正常,即使有超过 1000 万条记录,基于这两个字段的分组响应时间也是可以接受的。然而,随着数据的增长,索引的效率正在降低,因为 RDBMS 仍然必须解析所有这些数据子集,而不仅仅是解析这两个字段。即使使用正确的索引,这也会导致报告越来越慢。
问题:
尽管数量与记录具有一对一的关系,并且将数量和状态与记录 id 外键一起放在单独的表中并没有真正意义,但是,即使它变得不那么规范化,您认为这会提高效率吗?
我为什么要问这个问题?
因为这对我来说听起来很简单,如果我有一个单独的表,其中包含记录 id 和相应的金额,那么当我运行一些关于金额和状态的报告时,它们将比当前设置快得多因为数据库现在必须查看在更少的数据和更少的数据量必须通过数据总线等,并且所有那些不需要计算报告的字段都不会在操作系统级别被解析为数据。我知道当我运行关于数量和状态的报告时,数据库不会关心存储在其中的其他字段和值,但是它仍然必须读取所有这些数据子集才能解析记录,并且在磁盘级别仍然结果reads
。