2012-01-18 83 views
3

我有2個表格:產品類別。每個類別都有很多產品,一個產品可以屬於多個類別。外鍵和索引

產品

product_id - int primary auto increment 
name - unique 
etc. 

類別

category_id - int primary auto increment 
name - unique 
etc. 

我有一個多對多的關係第3臺。

products_categories

product_id -> foreign key: products.product_id 
category_id -> foreign key: category.category_id 

我的問題是:我應該在product_categories更快的選擇查詢創建product_idcategory_id指標,如果是,什麼指標?

感謝

回答

2

這要看查詢將是最常見的。

您最終可能會有三個索引。

  1. 如果你有... WHERE products_categories.product_id = XXX,創建product_id的索引。

  2. 同爲category_id

  3. 創建兩個category_idproduct_id索引,如果你有... WHERE products_categories.category_id = XXX AND products_categories.product_id = YYY

然而,following the MySQL manual,請記住,在(category_id, product_id)的指數可能是多餘的(category_id)上的索引。另外,(product_id, category_id)上的索引可能與(product_id)上的索引重複。所以你最終可能會得到兩個索引(而不是三個),這些索引涵蓋了所有頻繁的查詢需求。

+2

只是說,你應該堅持一種方式:要麼查詢category_id和product_id,要麼反過來。然後你只需要一個複合索引,你可以添加第二個簡單的索引 – mkk 2012-01-18 13:13:51

+0

謝謝你的解釋,並且介紹給我多列索引。 – 2012-01-18 13:15:17

1

您definitly應該創建索引,因爲外鍵約束隻字未提爲約束的源字段,所以它不會自動創建索引。

對於「哪個索引」你ofcourse不想要的唯一索引的問題 - 我想用這是BTREE一個默認指數堅守。

+0

謝謝你:FOREIGN KEY約束沒有提到約束的源字段。 – 2012-01-18 13:16:56