我正在制作一个网络应用程序,并且我使用MySQL作为我的数据库后端。我的数据库最终会变得更大,就像某些表中超过1亿行。关于这么大的桌子,我只想确认一件事。
选项1。假设表有主键,并使用主键进行查询,但我将需要运行mysql查询,假设每个用户登录有100个查询。
USERID KEYS
1 {1,2,3,4}我将获取user的键,然后进行主键查询以获取每个值
PRI.KEY Value
1 google
2 yahoo
3 aol
4 windows例如,如果用户登录,我需要获取他的站点的书签。因此,我将执行两个查询从TB_KEYS where USERID=1中选择关键字;然后解析这些关键字,对于每个关键字,从TB_VALUES where PRI.KEY=中选择值(关键字-I已获得,从第一个查询中解析);
选项2.我没有使用主键进行查询,但我需要为用户的登录运行一些查询。
OPT_TABLE_2
USERID KEY Value
1 1 google
1 2 yahoo
1 3 aol
1 4 windows从USERID =1的OPT_TABLE_2中选择值;
哪个选项更好?
发布于 2012-05-24 16:52:32
,但我需要运行mysql查询,比如说每个用户登录100个查询。
因此,这种方法是错误的。您尚未应用relational database normalisation rules。
,但我需要为用户的登录运行几个查询
那么它可能仍然是错误的。您应该只需要运行一次查询,即可从该结构中获取与用户相关的数据-或者您正在尝试获取的信息不是这些建议的结构所表示的。
减少查询的数量将对性能产生巨大的影响。
对自己进行测试是微不足道的。
发布于 2012-05-24 16:40:37
使用关系数据库,可能是第一个。有了正确的索引,在第二个中进行过滤应该是相当快的,但第一个应该有更小的表,这通常更好。
实际上有三个表可能更好:用户、用户-密钥对,然后是密钥。
但是,如果您正在运行那么多的查询,那么您可能真的想找出原因并少运行一些。
与任何重要的性能问题一样:对其进行基准测试。生成10K测试用户及其数据,并查看在每个方法下运行时会发生什么。
https://stackoverflow.com/questions/10733869
复制相似问题