在这种情况下使用int而不是bigint有什么好处?

时间:2010-06-10 11:21:13

标签: mysql

(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查询将如何显示?

2 个答案:

答案 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或您为此目的所需要的。

相关问题