作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个大表来存储整数范围。我可以用两个字段来做到这一点:
start|end
10 |210 (represents 10 to 210)
5 |55 (represents 5 to 55)
(通过 end
列快速选择),或者:
start|length
10 | 200 (represents 10 to 210)
5 | 50 (represents 5 to 55)
(按长度
列快速选择)。
如果有时我需要按 end
进行选择,有时需要按 length
进行选择,并且两个查询都需要快速,该怎么办?我可以同时存储:
start|length|end
10 | 200 |210
5 | 50 |55
但这并没有规范化,每个人都必须记住更新这两个字段,这只是糟糕的设计。
我知道我可以通过 start + length
或 end - start
进行选择,但是对于一个非常大的表,这不是非常慢吗?
如何在不存储冗余数据的情况下快速查询计算值 - 或者我应该只存储额外的列?
最佳答案
根据您使用的数据库类型,您可能希望使用触发器来计算派生字段。这样,它们就永远不会不同步。
这意味着每次开始或结束更改时都可以重新计算字段(长度)。
关于sql - 具有复杂 WHERE 条件的高效 SELECT - 我是否需要存储具有计算值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774501/
我是一名优秀的程序员,十分优秀!