(MYSQL n00b)
我有3张桌子:
id = int(10),photo_id = bigint(20)
PHOTO记录限于300万
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:将COLOR和SIZE上的photo_num
更改为int(10)
并将其指向PHOTO的ID更好吗?
现在我使用这些:(图片中没有照片)
SELECT * from COLOR WHERE photo_num='xxx';
SELECT * from SIZE WHERE photo_num='xxx';
Q2:如果在COLOR,SIZE中使用了PHOTO ID,SELECT查询将如何显示?
答案 0 :(得分:1)
Q1:最好使用int作为外键,但更重要的是正确索引表。如果你有正确的索引,那么无论哪种方式都可能足够好。对于您的查询,您需要确保photo_num
已在所有表格上编入索引。
我也想知道你为什么决定把它分成这样的表。照片可以有多种尺寸或颜色吗?单独表格的目的是什么?
Q2:它将使用JOIN:
SELECT *
FROM color
JOIN photo
ON photo.id = color.photo_id
WHERE photo_num='xxx'
答案 1 :(得分: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
或您为此目的所需要的。