php - 是否避免加入?

标签 php mysql database performance

假设您有一个包含 5000 万个帖子的 POSTS 表。这个表有:

ID, POST, CATEGORY_ID
1, "Hello world", 2

然后你有一个 CATEGORIES 表:

ID, CATEGORY_NAME
1, "Football"
2, "Baseball"

在网站上,您在 ORDER DESC 中列出这些帖子,使用连接显示帖子和类别名称。

[Baseball]
Hello World!

我正在考虑将(当有人创建新帖子时)CATEGORY_NAME 列添加到 POSTS 表中,以避免每次访问时都必须进行 JOIN。

按性能顺序,是个好主意吗?假设您每天有 10.000.000 名访问者(希望 :))

另一方面,我想知道您认为哪种数据库引擎更适合它,mysql?玛丽亚数据库? mongodb?

编辑:

想象一个更真实的场景:我需要 3 个连接来显示 POST + CATEGORY + USER_NAME。

POSTS: 50 million rows
CATEGORIES: 100 rows
USERS: 10 million rows

选项 A)连接 3 个表以显示:

[Baseball]
Hello World
- By John

选项 B) 添加 2 列 (CAT_NAME, USER_NAME) varchar(25) 到 POSTS 表以避免连接。

最佳答案

保持正常化。

JOIN 的成本低于拥有更丰满的表所导致的成本。目前(少量数据)您看不到太大的性能差异。当表太大而无法缓存在 RAM 中时,规范化的性能优势就会大放异彩。

关于php - 是否避免加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782921/

相关文章:

php - 键/值对中的 Laravel 查询生成器

mysql - 在MySQL数据库中添加约束保证唯一性

mysql - MongoDB 中的 "Transactions "?

php - 如何使用 AJAX/jQuery 显示打印?

php 从数组中取消设置对象

php - 编辑模板 Bootstrap 以在行中显示 4 个产品图像

database - MS-Access 优化

php - 在 WP/woocommerce 中是否有知道用户是否为 'shop_manager' 的功能

MYSQL SELECT 可重复字段到列中

php - 使用 PHP 计算 MySQL 中列值的所有值