在mysql

时间:2015-12-22 16:34:27

标签: php mysql database primary-key composite-primary-key

用于 mysql inoDB 引擎和表格,大多数使用进行阅读(与阅读查询相比,创建和编辑的对象不多)

表格适用于博客平台(用户可以自己创建博客),这是表格架构的两个选项:

例如表格帖子:

  

1:帖子(id,blog_id,title,content)=> id是唯一的主键auto   增量

     

2:帖子(id,blog_id,标题,内容)=> 复合主键是   (id,blog_id)我在创建查询之前使用触发器来增加id   柱

在我的大多数查询中有两种类型的地方:

1:用于检索单个帖子:

  解决方案一

where id=5

     解决方案二

where id=2 and blog_id=3

2:用于检索单个博客的多个帖子

  解决方案一

where blog_id=3

     解决方案二

where blog_id=3

问题:哪一项性能更好?

PS。如果我的问题不明确,那么我解释一下。

2 个答案:

答案 0 :(得分:1)

简而言之,性能方面并不重要。对于最常用的DBMS,在大多数情况下,你不会发现两者之间存在太大差异。

然而,最重要的是要考虑一个简单的问题:兼容性和易用性。大多数ORM系统和框架都经过调整,可以使用一列作为PK。因此,如果您选择复合键,它将始终需要一些调整。其次,如果您要在Web应用程序中使用REST方法,那么使用单一ID可以让您的生活更轻松。

答案 1 :(得分:1)

如果使用PK为“id,blog_id”:则索引中的前导列为“id”。

如果您的查询是“where blog_id = 3” - 此将不会使用索引,并且速度很慢,因为blog_id不是主要列。

由于ID是表中的唯一值 - 只需将其作为PK。否则误导,有人可能认为ID 不唯一。

如果您的查询通常会使用“blog_id”作为条件,那么请在该列上设置二级索引。

自动增加“id”列比在我的视图中使用数据库触发器更好。它的移动部件更少,编写的代码量也更少。