0

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

选项 1。假设这些表有 Primary Keys 并使用 Primary Key 进行查询,但我需要运行 mysql 查询,例如每个用户登录 100 个查询。

USERID  KEYS

1       {1,2,3,4}

我将为用户获取 KEYS,然后进行主键查询以获取每个值

PRI.KEY  Value

1        google

2        yahoo

3        aol

4        windows

例如,如果用户登录,我需要获取他的书签站点。所以我会做两个查询 Select KEYS from TB_KEYS where USERID=1; 然后我解析 KEYS 并为每个键,从 TB_VALUES 中选择值,其中 PRI.KEY=(KEY - 我获得,从第一个查询中解析);

选项 2。我没有使用 Primary Keys 进行查询,但我需要为用户登录运行一些查询。

OPT_TABLE_2

USERID  KEY         Value

1       1           google

1       2           yahoo

1       3           aol

1       4           windows

从 USERID =1 的 OPT_TABLE_2 中选择值;

哪个选项会更好..?

4

2 回答 2

0

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

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

但是,如果您正在运行这么多查询,您可能真的想找出原因并减少运行次数。

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

于 2012-05-24T08:40:37.150 回答
0

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

那么由于这个原因,这种方法是错误的。您尚未应用关系数据库规范化规则

但我需要为用户登录运行一些查询

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

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

自己测试是微不足道的。

于 2012-05-24T08:52:32.443 回答