gpt4 book ai didi

mysql - 在这种情况下使用复合主键而不是单个主键有什么好处?

转载 作者:行者123 更新时间:2023-12-01 00:09:50 26 4
gpt4 key购买 nike

Cakephp v3 现在可以支持复合主键。 http://book.cakephp.org/3.0/en/quickstart.html

快速入门指南中给出了一个示例;

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);

CREATE TABLE bookmarks (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(50),
description TEXT,
url TEXT,
created DATETIME,
modified DATETIME,
FOREIGN KEY user_key (user_id) REFERENCES users(id)
);

CREATE TABLE tags (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
created DATETIME,
modified DATETIME,
UNIQUE KEY (title)
);

CREATE TABLE bookmarks_tags (
bookmark_id INT NOT NULL,
tag_id INT NOT NULL,
PRIMARY KEY (bookmark_id, tag_id),
INDEX tag_idx (tag_id, bookmark_id),
FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
FOREIGN KEY bookmark_key(bookmark_id) REFERENCES bookmarks(id)
);

快速入门指南提到 “您可能已经注意到 bookmarks_tags 表使用了复合主键。CakePHP 几乎在任何地方都支持复合主键,**使构建 Multi-Tenancy 应用程序变得更加容易**。”

Multi-Tenancy 应用程序是什么意思?在这种情况下,为什么使用复合主键比使用单个主键更好?

最佳答案

简而言之:clustering .

InnoDB 会自动将具有相同 bookmark_idbookmarks_tags 行聚集(物理组合在一起),使某些查询1 非常快,因为 DBMS 不不必“跳转”整个表格来收集所有相关行。

在这种情况下不需要代理键(自动增量 int),也不需要您为其基础索引支付的额外价格。有关自然键与代理键的更深入讨论,请查看 here .

虽然我不熟悉 Cakephp v3,但我猜它们只是意味着您可以在所有表​​的键前加上一个租户 ID,并且由于集群而在性能方面付出的代价非常小。


1 如:“查找给定书签的标签”。由于您在 {tag_id, bookmark_id} 上也有索引,因此相反的查询:“查找给定标签的书签”也会很快。

关于mysql - 在这种情况下使用复合主键而不是单个主键有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com