加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库设计 – 重复列以加快查询速度?

发布时间:2021-05-16 20:30:10 所属栏目:MsSql教程 来源:网络整理
导读:标题没有多大意义,但我想不出更好的标题来解决这个问题. 我有以下表格 项目 id 名字 顾客 id id_project 名字 支付 id id_customer 约会 总和 当用户进入系统时,他将可以访问某个项目.现在,我想列出该项目的所有付款,这应该很简单: SELECT FROM payments whe

标题没有多大意义,但我想不出更好的标题来解决这个问题.

我有以下表格

项目

> id
>名字

顾客

> id
> id_project
>名字

支付

> id
> id_customer
>约会
>总和

当用户进入系统时,他将可以访问某个项目.现在,我想列出该项目的所有付款,这应该很简单:

SELECT FROM payments where id_customer in (SELECT id from customers where id_project = 5)

我的问题是:如果以这种方式将列id_project添加到付款表不是更好,那么查询将更容易,更快捷.

解决方法

看来你在问 denormalization是否合理.

Denormalization is the process of attempting to optimize the read performance of a database by adding redundant data or by grouping data. In some cases,denormalization helps cover up the inefficiencies inherent in relational database software. A relational normalized database imposes a heavy access load over physical storage of data even if it is well tuned for high performance.

答案总是“取决于”,所以这是我的经验法则:

如果……

>数据量不大
>你还没有进行大量的联接
>和/或数据库性能目前不是瓶颈

然后保持正常化.是的,非规范化更快,但它也意味着您在系统中有冗余数据 – 必须维护并保持同步的数据.这些数据不再是“一个来源”,而是可以偏离的多个来源.随着时间的推移,这是有风险的,所以你不应该这样做,除非你有充分的理由去做,有一些基准支持.

我只会在…时反规范化

>数据量非常大
>连接很昂贵,你必须做很多事情来获得简单的查询返回
>数据库性能是瓶颈和/或您希望尽可能快地进行

在现代硬件上加入非常快,但它们永远不会免费.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读