哪些MySQL数据库设计(附件)最适合读取高性能?

时间:2011-06-15 12:20:59

标签: mysql database performance database-design

我是MySQL的数据库管理员和开发人员。我和MySQL一起工作了几年。我最近询问和研究O'Reilly高性能MySQL第二版,以提高我在MySQL高级功能,高性能和可扩展性方面的技能,因为我经常因为缺乏MySQL的先进知识而感到沮丧(并且在很大程度上,我还有。)

目前,我正在开发一个狡猾的网络项目。在这个项目中,我们将从一开始就拥有相当的内容和用户。我是数据库的设计者,这个数据库必须非常快(一些插入但主要是更重要的READS)。

我想在这里讨论这些要求

  • 会有几种商品
  • 这些项目在 common
  • 中有一些字段和关系
  • 这些项目还有一些字段和关系特殊,使它们彼此不同
  • 这些商品必须全部列出一起订购或按公共字段或关系过滤
  • 项目也必须仅按类型列出(对于例如item_specialA)

我有一些基本的设计疑问,我希望你帮我决定和学习哪种设计方法对于高性能的MySQL数据库更好。

经典方式

下图显示了在数据库中思考思维的第一个问题: Database diagram

集中接种

但也许我们可以用一些或伪对象导向的范例来改进它,将一般项目和关系集中在一个公共项目表上。列出所有类型的项目也很有用: Database diagram


  • 每个人的优点和缺点?
  • 您会选择哪种方式或根据之前的要求应用哪些更改?

提前全部感谢!!

3 个答案:

答案 0 :(得分:1)

您拥有两种截然不同的数据映射策略。你称之为“经典”的是“其他来源中的每个具体类一个表”,而你称之为“集中式”的是“每个类一个表”(Mapping Objects to Relational Databases: O/R Mapping In Detail)。它们都有其优点和缺点(按照上面的链接)。第一个策略中的查询会更快(在第二个策略中,您只需要加入2个表而不是3个。)

答案 1 :(得分:0)

我认为你应该探索经典的超类型/子类型模式。以下是来自SO的 some examples

答案 2 :(得分:0)

如果您主要关注速度,请考虑选择性地使用MyISAM表,使用集中的“对象”表,并在此表单上只添加一个具有正确索引的表:

object_type | object_id | property_name | property_value
user        | 1         | photos        | true
city        | 2         | photos        | true
user        | 5         | single        | true
city        | 2         | metro         | true
city        | 3         | population    | 135000

等等......例如,对主键或索引键(object_type,object_id,property_name)的查找速度非常快。此外,当您显示新属性时,无需以457表结束。

它不是一个精心设计的,也不是完全规范化的数据库,如果你正在寻找一个长期的大型网站,你应该考虑缓存,或者至少使用非规范化的范例,像这样的非规范化的mysql表,redis,或者MongoDB。