繁体   English   中英

使用MySQL进行规范化或替代

[英]Normalization or Alternative with MySQL

使用PHP和MySQL构建一个站点,该站点需要存储有关用户的很多属性(例如,用户的DOB,身高,体重等),这非常简单(单个表,很多属性(几乎都是必需的))。

但是,系统还需要存储其他信息,例如他们的口头语言,工具能力等。它们的全部特征都超过十二种。 默认情况下,我假定先创建一个单独的表(可能称为语言),然后创建一个具有复合ID(user_id,language_id)的链接表。

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

所以我的问题是,有没有一种替代方法会更有效率? 我想到的一种方法是将M2M值作为ID的CSV存储在用户表中,然后对其执行LIKE查询。 我知道LIKE并不是最好的,但是它比join更好吗?

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

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

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

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

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

如果视图查询非常慢,请考虑实例化视图

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM