Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql中使用普通主键自动递增或复合键_Php_Mysql_Database_Primary Key_Composite Primary Key - Fatal编程技术网

Php 在mysql中使用普通主键自动递增或复合键

Php 在mysql中使用普通主键自动递增或复合键,php,mysql,database,primary-key,composite-primary-key,Php,Mysql,Database,Primary Key,Composite Primary Key,对于mysql和inoDB引擎和表,大多数使用进行读取(与读取查询相比,创建和编辑不多) 表用于博客平台(用户可以自己创建博客),下面是我的两个表模式选项: 例如,对于表格帖子: 1:posts(id、blog\u id、title、content)=>id是唯一的主键 增量 2:帖子(id、博客id、标题、内容)=>复合主键是 (id,blog_id),我在创建查询之前使用触发器来增加id 纵队 在我的大多数查询中,有两种类型的where: 1:对于检索单个帖子: 其中id=5用于解决方案一

对于mysqlinoDB引擎和表,大多数使用进行读取(与读取查询相比,创建和编辑不多)

表用于博客平台(用户可以自己创建博客),下面是我的两个表模式选项:

例如,对于表格帖子:

1:posts(id、blog\u id、title、content)=>id是唯一的主键 增量

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

在我的大多数查询中,有两种类型的where:

1:对于检索单个帖子:

其中id=5
用于解决方案一

其中id=2,blog_id=3
用于解决方案二

2:用于检索单个博客的多篇文章

其中blog_id=3
用于解决方案一

其中blog_id=3
用于解决方案二

问题:哪一个性能更好


注:如果我的问题不清楚,请告诉我,然后我再解释。

简而言之,性能方面的问题并不重要。对于最常用的DBMS和大多数场景中的DBMS,您不会看到两者之间有太大的区别

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

如果使用“ID,blog_ID”的PK:那么索引中的前导列就是“ID”

如果您的查询是“where blog_id=3”-这将不使用索引,而且速度会很慢,因为blog_id不是前导列

由于ID在表中是唯一的值,所以只需将其作为PK即可。否则会产生误导,有人可能会认为ID不是唯一的

如果您的查询经常使用“blog_id”作为标准,那么在该列上有一个二级索引


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

我想这不取决于你选择的内容。@JonStirling我编辑了这个问题