2011-10-21 31 views
1

我需要关于MySQL的建议。MySQL - 两种解决方案之间的最佳性能

我有一个id,昵称,numDVD,金钱和表DVD有idDVD,idUser,LinkPath,计数器的用户表。

现在我相信,我可以有最大。 20位用户,每位用户拥有约30张DVD。

所以当我插入DVD时,我应该有idDVD(自动递增),idUser(用户表的idUser相同),LinkPath(通用字符串)和计数器,它是从1到30的数字(唯一编号) (取决于数字或DVD)为每个用户。

问题是处理最后一列“计数器”,因为我会选择例如2到3具有相同UserId的随机DVD。

所以我在想,如果它在我的情况下,最好的解决办法,并难以处理(对我来说我从来没有使用MySQL的),或者它更好地创造(每个用户1)20桌,包含ID和DVDname等

谢谢

+0

通过*'插入DVD'*您的意思是*'在'DVD'表中插入一行*',当然... –

回答

3

不要创建20个表!这会有点矫枉过正,如果你将来需要添加更多的用户呢?实际上不可能保持和可靠地更新。

一个更好的方式是这样的:

Table users 
-> idUser 
-> other user specific data 

Table dvd 
-> idDvd 
-> DVDname 
-> LinkPath 
-> other dvd specific data (no user data here) 

Table usersDvds 
-> idUser 
-> idDvd 

这样,这是没有问题,如果一个或多个用户具有相同的DVD,因为它是在usersDvds表只是另一个项目 - 在idDvd值将是相同,但idUser会有所不同。并且要计算用户有多少张DVD,只需执行下列操作:SELECT count(*) FROM usersDvds WHERE userId = 1

+0

非常感谢!简单高效的解决方案:) – Strom

1

您不需要每个用户的表,这样做会使后续的SQL编程基本上不可能。然而,这些数据量实际上并不会导致或减轻瓶颈。很可能整个数据库都会适合内存,所以通过任何模式访问都将成为实实在在的。

0

如果我明确了解您的要求,您应该能够通过创建复合索引来实现该目标,以便能够高效地进行选择。

如果表格中正在处理的数据太多,那么它将有助于清除一些历史数据。