MySQL的规范化或替代方案

时间:2009-09-04 13:36:04

标签: php mysql normalization

使用PHP和MySQL构建一个站点,需要存储很多关于用户的属性(例如他们的DOB,高度,重量等),这很简单(单个表,很多属性(几乎都是必需的))。

然而,系统还需要存储其他信息,例如他们的口语,工具能力等等。总而言之,他们有十多个这样的特征。默认情况下,我假设创建一个单独的表(称为语言),然后创建一个具有复合id(user_id,language_id)的链接表。

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

所以我的问题是,是否有更高效的替代方案?我想的一种方法是将M2M值作为ID的CSV存储在用户表中,然后针对它运行LIKE查询。我知道LIKE不是最好的,但它比连接更好吗?

非常感谢任何可能的解决方案。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

normalized数据库开始(例如,通过映射表链接到users表的语言表),以确保数据以干净和逻辑的方式表示。

如果您遇到性能问题,请检查您的查询并确保您有合适的indexes

如果您不喜欢使用多个联接重复编码查询,请定义一些views

如果查询的查看速度非常慢,请考虑materialized views

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