首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

MySQL性能
EN

Stack Overflow用户
提问于 2012-05-24 16:34:35
回答 2查看 76关注 0票数 0

我正在制作一个网络应用程序,并且我使用MySQL作为我的数据库后端。我的数据库最终会变得更大,就像某些表中超过1亿行。关于这么大的桌子,我只想确认一件事。

选项1。假设表有主键,并使用主键进行查询,但我将需要运行mysql查询,假设每个用户登录有100个查询。

代码语言:javascript
运行
复制
USERID  KEYS

1       {1,2,3,4}

我将获取user的键,然后进行主键查询以获取每个值

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
USERID  KEY         Value

1       1           google

1       2           yahoo

1       3           aol

1       4           windows

从USERID =1的OPT_TABLE_2中选择值;

哪个选项更好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-24 16:52:32

,但我需要运行mysql查询,比如说每个用户登录100个查询。

因此,这种方法是错误的。您尚未应用relational database normalisation rules

,但我需要为用户的登录运行几个查询

那么它可能仍然是错误的。您应该只需要运行一次查询,即可从该结构中获取与用户相关的数据-或者您正在尝试获取的信息不是这些建议的结构所表示的。

减少查询的数量将对性能产生巨大的影响。

对自己进行测试是微不足道的。

票数 0
EN

Stack Overflow用户

发布于 2012-05-24 16:40:37

使用关系数据库,可能是第一个。有了正确的索引,在第二个中进行过滤应该是相当快的,但第一个应该有更小的表,这通常更好。

实际上有三个表可能更好:用户、用户-密钥对,然后是密钥。

但是,如果您正在运行那么多的查询,那么您可能真的想找出原因并少运行一些。

与任何重要的性能问题一样:对其进行基准测试。生成10K测试用户及其数据,并查看在每个方法下运行时会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10733869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档