MySql | 关系型数据库与非关系型数据库在性能方面的区别

3
如果我们定义关系,例如一对一、一对多等,与不创建关系但在进行连接时会比较,哪种方法可以提高性能?
select * from employee inner join user on user.user_id = employee.user_id

我知道这个问题之前已经被问过了,大多数答案都说不使用关联不会影响性能。

但是我也听说创建索引会使查询更快,那么是否可以在没有创建关系的情况下为外键表创建索引呢?我对索引有点困惑。

如果我们有一个大型数据库,例如100+张表以及大量记录,那么关系是否会影响数据库查询性能?

我正在使用MySQL和PHP。


简而言之:使用关系数据库管理系统(RDBMS)来处理彼此相关的数据。 - tyteen4a03
2个回答

1

外键基本上用于数据完整性。

当然,索引可以提高性能。

关于使用或不使用外键的性能问题,它们被认为可以提高性能是因为当您定义外键时,您隐式地定义了一个索引。如果引用表中不存在这样的索引,则会自动在引用表上创建此类索引。


所以简而言之,您的意思是,在表上创建索引需要创建关系,而这意味着关系会提高性能? - Sizzling Code
不完全是这样,我的意思是创建索引可以提高选择查询的性能。只是这样,当你提高性能时,添加外键也是因为这个原因。 - javier_domenech
这是否意味着,如果我们有一个巨大的数据库和海量数据需要处理,最好在所有表上使用关系? - Sizzling Code
不,我认为在这些情况下你需要的是索引。如何对它们进行索引取决于您(可以在表上创建外键或手动添加索引)。 - javier_domenech

1
关系用于维护数据库的引用完整性,它们不会影响“select”查询的性能。它们会降低“insert”、“update”和“delete”查询的性能,但你很少希望没有引用完整性的关系型数据库。
索引使“select”查询运行更快。它们也会使插入和更新查询显著变慢。要了解有关索引如何工作的更多信息,请访问use-the-index-luke。这是我发现的迄今为止最好的关于此主题的网站。
话虽如此,当你声明一个主键时,数据库通常会自动创建索引,其中一些(尤其是 MySql)甚至在定义外键时也会自动创建索引。你可以在上述网站上阅读有关它们为什么这样做的所有信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接