所以我分配外键并想知道哪个更好用于索引或外键
这一个:
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)
);
答案 0 :(得分:2)
index
和foreign key
是两回事。
foreign key
表示meeting
的{{1}}值不会出现在room_id
{{1} room
中列。
room_id
意味着您可以更有效地查询index
meetings
,而无需扫描整个表格。
如果room_id
和meeting
都相当大,并且您有几个组合它们的查询(通过联接或子查询),我同时拥有room
和index
。
答案 1 :(得分:1)
外键和索引是完全不同的东西。
添加外键以强制数据的完整性。你说,room_id只允许来自room.room_id的号码。这是一个很好的财产,你应该尽可能地尝试使用它们。
添加索引以告诉数据库您将如何搜索数据,以便它可以准备必要的数据结构来有效地执行此操作。在这种情况下,一旦您添加索引查询,在特定房间中搜索会议将会很快。
这两个概念实际上是完全不相关的。