Pla*_*Ton 3 normalization database-design optimization
我已经开发了一段时间,但以前从未真正处理过数据库/缩放问题。这突然发生了变化,我发现自己陷入了深渊。
我有 2 个 SQL 表,例如:
VOTES
vote_id (PK)
question_id (FK)
user_id (FK)
option_id (FK) <The option the user voted for>
Run Code Online (Sandbox Code Playgroud)
“问题”表如下所示:
QUESTIONS
question_id (PK)
option_1 (FK --> Options)
option_2 (FK --> Options)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,我经常必须检索某个问题的所有 option_1 票(或 option_2 票)的总和。这是目前通过选择 count where question_id = [@question.id] 和 option_id = [@question.option_1.id]"
我猜将 option_1_votes 和 option_2_votes 列添加到“问题”表并在每次添加投票时增加它们会更快。但归根结底,这是冗余数据。
所以,作为一个对数据库设计原则一无所知的人,这里的经验法则是什么?顶级 DBA 会只是添加列,还是尝试其他解决方案?
干杯...
通常,除非我真的需要,否则我不会添加多余的列。
在任何 RDBMS 中,对一组数据运行 COUNT 都是非常有效的。
考虑到这是对索引(希望)缓存数据的读取以获取计数将击败第二次写入以维护非规范化列。此写入需要更多资源/锁定/更长的事务等,这会影响读取更多
如果性能随着时间的推移成为一个问题,那么您可以使用索引(又名物化)视图更有效地预先计算 COUNT
归档时间: |
|
查看次数: |
172 次 |
最近记录: |