2010-06-10 64 views
2

(MYSQL的n00b)在這種情況下使用int而不是bigint有什麼好處?

我有3個表:

ID = INT(10),photo_id = BIGINT(20)

PHOTO記錄侷限於3000000

PHOTO: 
+-------+-----------------+ 
| id | photo_num  | 
+-------+-----------------+ 
| 1  | 123456789123 | 
| 2  | 987654321987 | 
| 3  | 5432167894321 | 
+-------+-----------------+ 

COLOR: 
+-------+-----------------+---------+ 
| id | photo_num  | color | 
+-------+-----------------+---------+ 
| 1  | 123456789123 | red  | 
| 2  | 987654321987 | blue | 
| 3  | 5432167894321 | green | 
+-------+-----------------+---------+ 


SIZE: 
+-------+-----------------+---------+ 
| id | photo_num  | size | 
+-------+-----------------+---------+ 
| 1  | 123456789123 | large | 
| 2  | 987654321987 | small | 
| 3  | 5432167894321 | medium | 
+-------+-----------------+---------+ 

COLOR和SIZE表格都會有數百萬條記錄。

Q1:是更好地改變顏色和大小photo_numint(10)並將其指向照片的ID?

現在我使用這些:(PHOTO是在畫面任何地方)

SELECT * from COLOR WHERE photo_num='xxx'; 
SELECT * from SIZE WHERE photo_num='xxx'; 

Q2:如何將SELECT查詢一下,如果有照片的證件的顏色是使用,大小?

回答

1

Q1:最好使用int作爲外鍵,但更重要的是正確索引表。如果你有正確的索引,它可能會是足夠好的任何一種方式。對於您的查詢,您需要確保photo_num已在所有表格上編入索引。

我也想知道爲什麼你決定把它拆分成這樣的桌子。照片可以有多種尺寸或顏色嗎?什麼是單獨的表格的目的?

Q2:它會使用JOIN:

SELECT * 
FROM color 
JOIN photo 
ON photo.id = color.photo_id 
WHERE photo_num='xxx' 
+0

分裂的原因是因爲SIZE和COLOR分別有10列。爲了簡單起見,我在這裏只使用了2列。 – Yeti 2010-06-10 11:35:01

1

我會去用:

PHOTO: 
+-------+-----------------+----------+---------+ 
| id | photo_num  | color_id | size_id | 
+-------+-----------------+----------+---------+ 
| 1  | 123456789123 | 1  | 3  | 
| 2  | 987654321987 | 1  | 2  | 
| 3  | 5432167894321 | 2  | 2  | 
+-------+-----------------+----------+---------+ 

COLOR: 
+-------+---------+ 
| id | color | 
+-------+---------+ 
| 1  | red  | 
| 2  | blue | 
| 3  | green | 
+-------+---------+ 


SIZE: 
+-------+---------+ 
| id | size | 
+-------+---------+ 
| 1  | large | 
| 2  | small | 
| 3  | medium | 
+-------+---------+ 

和:

SELECT <Columns> FROM PHOTO JOIN COLOR ON PHOTO.color_id = COLOR.id JOIN SIZE ON PHOTO.size_id = SIZE.id 

<Columns>也許是PHOTO.photo_num, COLOR.color, SIZE.size或者你需要什麼目的。

+0

實際上,COLOR和SIZE表格分別有10列!爲了簡單起見,我刪除了所有內容。 – Yeti 2010-06-10 11:31:37

+1

然後這取決於這10列中的任何一列是否是「PHOTO」特定的。如果他們不是,我仍然按照上面的方式加入他們。至少我會在'SIZE/COLOR'表中使用'PHOTO.id'作爲參考,假設這是你的'IDENTITY'列。 – Don 2010-06-10 11:49:44

相關問題