2014-12-31 235 views
3

我想问的是,如果我们定义关系,一对一,一对多等,将会提高性能,而不是我们不建立关系,但要做加入上表去像MySql |关系数据库vs非关系数据库的性能

select * from employee inner join user on user.user_id = employee.user_id 

我知道这个问题以前有人问及最答案我有说性能没有得到受不使用的关系。

但我也听说创建索引使得查询更快,所以有可能在不创建关系的情况下为外键在表上创建索引。我对索引有点困惑。

以及如果我们有大型数据库像100 +表加上很多记录会怎么样关系在数据库查询性能方面?

即时通讯使用mysql和php ..

+0

简而言之:将RDBMS用于彼此相关的数据。 – tyteen4a03

回答

1

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

当然,索引提升了性能。

关于有或没有外键的性能,当它说他们提高性能是因为当你定义一个外键你隐式定义一个索引。如果索引表不存在,则会在引用表上自动创建这样的索引。

+0

所以总之你的意思是创建索引表我必须创建关系,然后再次它意味着关系提升性能? –

+0

不完全是,我的意思是创建索引会提高选择查询性能。就这一点而言,当你提高性能时,添加外键就是因为这一点。 – vivoconunxino

+0

所以这意味着,如果我们有一个hudge数据库和大量的数据进行处理,那么使用所有表上的关系会更好? –

1

关系用于维护数据库的参照完整性。它们完全不会影响“选择”查询的性能。它们确实降低了“插入”,“更新”和“删除”查询的性能,但是您很少需要关系数据库而没有参照完整性。

索引是使“select”查询运行得更快的原因。它们也使插入和更新查询速度明显变慢。要详细了解索引如何工作,请转至use-the-index-luke。这是迄今为止我发现的关于这个话题的最佳网站。

也就是说,数据库通常会在声明主键时自动创建索引,并且其中一些(特别是MySql)会在您定义外键时自动创建索引。你可以阅读所有关于他们为什么在上述网站上这样做。