【问题标题】:Tips on designing a MySQL database设计 MySQL 数据库的技巧
【发布时间】:2016-05-31 15:26:30
【问题描述】:

我正在为一个列表网站设计一个 mysql 数据库。这是我第一次,我对此做了一些谷歌搜索:) 我想交叉检查我的方法是否有任何问题。

所以基本上,我将有 5 张桌子。让我们说

  1. 工作室(实际工作室数据点)
  2. 工作室设施(如交通、水等)
  3. 工作室图片
  4. 工作室评论。 (姓名、星星等)
  5. 位置和地区(城市、城市方向、地区,例如班加罗尔、班加罗尔北部、Hebbal)。

所以 Studio 表将保存主记录。设施、图像和评论将使用工作室作为 FK 来保存数据。 位置 ID 将保存在工作室记录中。

我现在的问题是,如果我想显示所有 hebbal 工作室的列表,我将必须执行所有 5 个表的连接以显示工作室数据、图像、评论和设施。

1) 可以吗?您认为这种方法有什么潜在的问题吗?有没有更好的方法?
2)查询执行时间会随着记录数的增加而增加吗?

谢谢

【问题讨论】:

  • 位置,应该有经纬度字段
  • 是的,我会将它们添加到工作室的桌子上。位置表将用于过滤
  • @Strawberry,我已经读过,通过索引将用于 where 子句的列,可以提高速度,但我想随着时间的推移和记录数的增加,查询时间肯定会增加权利?..
  • @Strawberry,假设我将工作室表拆分为每个类别的多个表,我想从长远来看应该会有所帮助??
  • 是的。但是当它发生时要担心。

标签: mysql database performance join


【解决方案1】:

这看起来像是一种可靠的方法,数据库被设计为使用连接并且这些是合适的。与您当前的设计相比,非规范化会导致更多问题,尤其是在数据完整性方面,

查询会随着数据的增加而变慢吗?他们当然会,但任何设计都是如此。通过网络或互联网发回 10 gig 数据将比发送 10 个字节慢。

您没有问,但您可以采取哪些措施来防止查询变得不可接受地变慢?是的。首先,您需要确保将经常出现在 where 子句中的外键和字段以及 PK 都编入索引。这足以防止大多数简单查询的糟糕性能。

您应该做的另一件事是阅读一本关于您正在使用的特定数据库后端的性能调整的好书。我读过的大多数书至少有一章是关于设计查询以提高性能的。阅读它并重新阅读它并重新阅读它,直到它深入你的骨头并且你不会考虑以任何其他方式编写查询。

许多数据库被认为很慢,因为它们的开发人员不擅长编写高性能查询,并且连接受到指责。了解 sargabilty。了解索引是如何工作的以及拥有它们的权衡是什么。在性能受到影响之前了解您的表可以有多宽(提示有时一对一关系中的两个表比使用一个表更快,表会非常宽。)。

如果没有扎实的性能调优基础,您将无法有效地设计数据库。

【讨论】:

    【解决方案2】:

    您可以使用一个主表(这里是 Studio)并且可以使用所有其他表的引用键。

    最好为normalization 拆分表。

    标准化的好处

    • 消除数据冗余
    • 提高性能
    • 查询优化
    • 由于一个表中的列数较少,更新速度更快
    • 索引改进

    研究规范化,您将获得构建数据库的好主意。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多