用于 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。如果我的问题不明确,那么我解释一下。
答案 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”列比在我的视图中使用数据库触发器更好。它的移动部件更少,编写的代码量也更少。