使用PHP和MySQL构建一个站点,需要存储很多关于用户的属性(例如他们的DOB,高度,重量等),这很简单(单个表,很多属性(几乎都是必需的))。
然而,系统还需要存储其他信息,例如他们的口语,工具能力等等。总而言之,他们有十多个这样的特征。默认情况下,我假设创建一个单独的表(称为语言),然后创建一个具有复合id(user_id,language_id)的链接表。
我预见到的问题是访问者尝试使用这些标准搜索用户。我们希望使用的数据集在发布时将拥有超过15,000个用户,主要功能是搜索和优化用户。这意味着每天有数百个查询,并且使用带有十几个或更多JOIN的查询的前景并不吸引人。
所以我的问题是,是否有更高效的替代方案?我想的一种方法是将M2M值作为ID的CSV存储在用户表中,然后针对它运行LIKE查询。我知道LIKE不是最好的,但它比连接更好吗?
非常感谢任何可能的解决方案。
答案 0 :(得分:1)
用连接来做。然后,如果未达到您的绩效目标,请尝试其他方法。
答案 1 :(得分:0)
从normalized数据库开始(例如,通过映射表链接到users表的语言表),以确保数据以干净和逻辑的方式表示。
如果您遇到性能问题,请检查您的查询并确保您有合适的indexes。
如果您不喜欢使用多个联接重复编码查询,请定义一些views。
如果查询的查看速度非常慢,请考虑materialized views。
如果您每天有几千条记录和几百条查询(实际上,这非常小且使用率低),这些技术将允许您的网站全速运行,而不会影响数据完整性。如果您需要每天扩展到数百万条记录和数百万条查询,即使这些技术可能还不够;在这种情况下,请调查cacheing和denormalization。