我理解使用表关系来创建约束的好处,例如当一行中的行与另一个表中的行相关时,阻止从中删除行。
但是这样做会在运行联接查询时提高性能。
EG。假设我有InnoDB表USER和USERINFO,如下所示:
USER
|Field |Type |Null |Key |Default |Extra
--|id |int(11) |NO |PRI | |auto_increment
| |email |varchar(700)|NO | | |
| |password|varchar(255)|NO | | |
| |active |varchar(1) |NO | |n |
| |created |timestamp |NO | |CURRENT_TIMESTAMP|
|
| USERINFO
| |Field |Type |Null |Key |Default |Extra
--|user |int(11) |NO |PRI | |
|name |varchar(100)|NO | | |
|position|varchar(100)|NO | | |
...
运行以下查询时,在性能方面是否有益?
SELECT * FROM USER U JOIN USERINFO UI ON U.id = UI.user
答案 0 :(得分:2)
它是可能(并且很可能将)提升性能的索引,而不仅仅是外键。
另外:MySQL creates foreign key indexes automatically for InnoDB。