2011-05-04 20 views
0

我有這個表:試圖瞭解這個MySQL表意味着

create table user_roles 
(
user_id INT UNSIGNED NOT NULL, 
role_id INT UNSIGNED NOT NULL, 
UNIQUE (user_id, role_id), 
INDEX(id) 
); 

user_idrole_id是其他表,即userroles的主鍵。 UNIQUE (user_id, role_id),是什麼意思?這是否意味着所有user_id/role_id對必須是唯一的?

什麼是INDEX(user_id)

回答

4

UNIQUE確實確保所有進入字段的值都不同於先前的值。

INDEX(user_id)將在user_id字段上創建一個索引,以便索引更好,即可以更快地搜索它。

如果沒有索引,MySQL必須從第一行開始,然後讀取整個表以查找相關行。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

+0

打我7秒! Upvoted。 – 2011-05-04 10:43:56

+0

謝謝:)我們也說過幾乎完全一樣的東西! – James 2011-05-04 10:44:32

+2

我想補充說'UNIQUE'也是一個索引!所以它也會使查詢更快,使用user_id和role_id查找行。我想這甚至可能會使其他索引變得冗餘。 – 2011-05-04 10:45:10

1

是,UNIQUE(USER_ID,ROLE_ID)意味着對於任何特定行這兩個字段的組合不能在表中不止一次存在。

INDEX(USER_ID)適用於user_id列的索引,使得(插入/更新表時,一些小的性能代價)

1

是的,它意味着USER_ID/ROLE_ID對是搜索該列非常快獨特。