我正在制作一个Web应用程序,我正在使用MySQL作为我的数据库后端。我的数据库最终会更大,比如某些表中有超过 1 亿行。我只是想确认这么大的桌子的一件事。
选项 1 。假设表有主键并使用主键进行查询,但我需要进行运行 mysql 查询,例如每个用户登录 100 个查询。
USERID KEYS
1 {1,2,3,4}
我将获取用户的 KEYS,然后进行主键查询以获取每个值
PRI.KEY Value
1 google
2 yahoo
3 aol
4 windows
例如,如果用户登录,我需要获取他的书签网站。所以我会做两个查询从 USERID=1 的TB_KEYS中选择键;然后我解析 KEYS 并为每个键,从 PRI TB_VALUES中选择"值"。键=(键 - 我从第一个查询中得到,解析);
选项 2.我没有使用主键进行查询,但我需要为用户的登录运行一些查询。
OPT_TABLE_2
USERID KEY Value
1 1 google
1 2 yahoo
1 3 aol
1 4 windows
从用户 ID =1 的OPT_TABLE_2中选择值;
哪个选项会更好..?
但是我需要运行MySQL查询,例如每个用户登录100个查询。
那么由于这个原因,这种方法是错误的。您尚未应用关系数据库规范化规则。
但是我需要为用户的登录运行一些查询
那么它可能仍然是错误的。您应该只需要运行一个查询即可从此结构中获取与用户相关的数据 - 要么是该查询,要么是尝试获取这些建议结构未表示的信息。
减少查询数量将对性能产生巨大影响。
自己测试是微不足道的。
对于关系数据库,可能是第一个。 通过适当的索引,在第二个之间执行过滤器应该非常快,但第一个应该有更小的表,这通常更好。
实际上有三个表可能会更好:用户、用户密钥对,然后是键。
但是,如果您运行那么多查询,您可能真的想找出原因并运行更少的查询。
与任何重要的性能问题一样:对其进行基准测试。 生成 10K 测试用户及其数据,并查看在每种方法下运行它时会发生什么。