0

使用 PHP 和 MySQL 构建一个需要存储大量关于用户的属性(例如他们的出生日期、身高、体重等)的站点,这非常简单(单个表,许多属性(几乎所有属性都是必需的))。

但是,系统还需要存储其他信息,比如他们的口语、乐器能力等。总的来说,他们有十几个这样的特征。默认情况下,我假设创建一个单独的表(可能称为语言),然后创建一个具有复合 ID(user_id,language_id)的链接表。

我预见的问题是当访问者尝试使用这些标准搜索用户时。我们希望使用的数据集在发布时将拥有超过 15,000 名用户,主要功能将是搜索和优化用户。这意味着每天有数百个查询,并且使用包含十几个或更多 JOIN 的查询的前景并不吸引人。

所以我的问题是,有没有更有效的替代方案?我正在考虑的一种方法是将 M2M 值作为 ID 的 CSV 存储在用户表中,然后对其运行 LIKE 查询。我知道 LIKE 不是最好的,但它比加入更好吗?

任何可能的解决方案将不胜感激。

4

2 回答 2

1

用连接来做。然后,如果您的绩效目标没有达到,请尝试其他方法。

于 2009-09-04T13:39:55.510 回答
0

从一个规范化的数据库开始(例如一个语言表,通过一个映射表链接到用户表),以确保您的数据被清晰且合乎逻辑地表示。

如果您有性能问题,请检查您的查询并确保您有合适的索引

如果您不喜欢重复编写具有许多连接的查询,请定义一些视图

如果视图查询速度很慢,请考虑物化视图

如果您每天有几千条记录和几百个查询(实际上,这非常小且使用率很低),这些技术将允许您的站点全速运行,而不会影响数据完整性。如果您需要每天扩展到数百万条记录和数百万条查询,那么即使这些技术也可能还不够;在这种情况下,请调查缓存非规范化

于 2010-02-12T00:31:37.373 回答