在MySQL数据库中,表与表之间存在关系,一个表的主键作为外键存储在第二个表中,是否还需要执行连接?
如果有,声明关系有什么意义?我会在黑暗中刺一下,说这与索引有关,或者相关表可以更快地找到相关记录?我试过用谷歌搜索这个,但似乎找不到太多。我敢肯定这方面有很多内容,但我不知道要搜索的关键字。
这是表 1 和表 2 的示例:
------------------- Table 1 ----------------------
CREATE TABLE IF NOT EXISTS `db_hint`.`user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`fb_id` INT NOT NULL,
`last_logged_in` DATETIME NULL,
`permissions` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `permissions_id_idx` (`permissions` ASC),
CONSTRAINT `permissions_id`
FOREIGN KEY (`permissions`)
REFERENCES `db_hint`.`permissions` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
----------------- Table 2 ----------------------
CREATE TABLE IF NOT EXISTS `db_hint`.`user_stat` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `user_id_idx3` (`user_id` ASC),
CONSTRAINT `user_id`
FOREIGN KEY (`user_id`)
REFERENCES `db_hint`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
当执行任何类型的连接时,InnoDB 引擎是否以任何方式使用关系?谢谢。
最佳答案
声明外键的目的是为了保证数据的一致性。 您仍然需要 JOIN 才能获得所需的数据。 在 MySQL 中,外键会提高性能,但不要期望与索引有太大可比性。
关于MySQL 关系和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256985/