我想要问的是,如果我们定义关系,一对一,一对多等会增加性能,相比之下,如果我们不创建关系但是像往常一样加入表格
select * from employee inner join user on user.user_id = employee.user_id
我知道之前已经问过这个问题,而且大多数答案都说不会因为不使用关系而影响性能。
但我也听说创建索引会使查询更快,因此可以在不创建关系的情况下在外键的表上创建索引。我对索引感到困惑。
如果我们有大型数据库,如100多个表加上大量记录,那么这些关系在数据库查询性能方面是否重要?
我正在使用mysql和php ..
答案 0 :(得分:1)
外键基本上用于数据完整性。
当然,索引可以提升性能。
关于使用或不使用外键的性能,当它表示它们提高性能时,因为当您定义外键时,您隐式定义了一个索引。如果引用表不存在,则会自动在引用表上创建此索引。
答案 1 :(得分:1)
关系用于维护数据库的引用完整性。它们根本不影响“选择”查询的性能。它们确实会降低“插入”,“更新”和“删除”查询的性能,但您很少需要没有引用完整性的关系数据库。
索引是“选择”查询运行得更快的原因。它们还使插入和更新查询显着变慢。要了解有关索引工作方式的更多信息,请转至use-the-index-luke。到目前为止,这是我找到的关于这个主题的最佳网站。
也就是说,数据库通常在声明主键时自动生成索引,其中一些(特别是MySql)即使在定义外键时也会自动生成索引。您可以在上述网站上阅读有关他们为何这样做的所有信息。