避免加入或不加入?

时间:2016-06-13 06:16:44

标签: php mysql database performance

想象一下,您有一个包含5000万个帖子的表格帖子。该表有:

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

然后你有一个CATEGORIES表:

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

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

[Baseball]
Hello World!

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

为了表现,是个好主意?想象一下,你每天有10.000.000名访客(希望如此:))

另一方面,我想知道你认为哪种数据库引擎更适合它,mysql? MariaDB的? 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)向POSTS表添加2列(CAT_NAME,USER_NAME)varchar(25)以避免加入。

1 个答案:

答案 0 :(得分:0)

保持正常化。

JOIN的费用低于拥有丰富的桌子所造成的费用。目前(少量数据)你看不出太多的性能差异。当表太大而无法在RAM中缓存时,规范化的性能优势将会大放异彩。