我可以在MySQL中使用任何一个命令吗? INDEX和FOREIGN KEY

时间:2014-10-12 15:59:06

标签: mysql sql foreign-keys

所以我分配外键并想知道哪个更好用于索引或外键

这一个:

CREATE TABLE meeting (
    meeting_id INT(11) NOT NULL PRIMARY KEY,
    room_id INT(11),
    name TINYTEXT,
    date DATE,
    FOREIGN KEY(room_id) REFERENCES room(room_id)
);

或者这个:

CREATE TABLE meeting (
    meeting_id INT(11) NOT NULL PRIMARY KEY,
    room_id INT(11),
    name TINYTEXR,
    date DATE,
    INDEX(room_id)
);

2 个答案:

答案 0 :(得分:2)

indexforeign key是两回事。

foreign key表示meeting的{​​{1}}值不会出现在room_id {{1} room中列。
room_id意味着您可以更有效地查询index meetings,而无需扫描整个表格。

如果room_idmeeting都相当大,并且您有几个组合它们的查询(通过联接或子查询),我同时拥有roomindex

答案 1 :(得分:1)

外键和索引是完全不同的东西。

添加外键以强制数据的完整性。你说,room_id只允许来自room.room_id的号码。这是一个很好的财产,你应该尽可能地尝试使用它们。

添加索引以告诉数据库您将如何搜索数据,以便它可以准备必要的数据结构来有效地执行此操作。在这种情况下,一旦您添加索引查询,在特定房间中搜索会议将会很快。

这两个概念实际上是完全不相关的。