好的,首先让我先谈谈我要做的事情。基本上,在我的学习期间,我在PHP中编写了一个小网络服务,根据长度,演员,导演,作家,流派等一些可测量的大小来计算相似电影的相似程度。我用于此的数据基本上是一组数据从omdbapi.com获得。
我仍然拥有该数据库,但从技术上讲它只是一个包含每部电影所有信息的SINGLE表。这意味着,对于每部电影,所有上述参数都用逗号分隔。因此,我到目前为止使用了一个查询,通过使用LIKE语句封装所有这些东西。查询可能变得非常大,因为我几乎会查询表中的每个参数,有时为不同的actor有5个不同的LIKE语句,对于director和writer也是如此。回到上次使用时,大约需要30到60秒才能输入一部电影并收到15个类似电影的列表。
现在我开始了我的第一份工作并在空闲时间自学,我想在我自己的网站上工作。因为对于我想用它做什么没有真正的概念,我想我会把我的老电影查找器"再一次,这次使用它不同。 现在要挑战自己,我希望整个事情更快。明白,数据永远不会改变,只能读取。它也不是真的"关系,作为演员姓名等只是字符串,并没有其他任何地方的真实条目。这实际上意味着具有相同的名称将被视为同一个角色。
现在我的实际问题是: 假设我希望我的选择查询运行得更快,运行一个将逗号分割的字符串拆分为额外表格的脚本是有意义的(这些是n到m的关系,请参见下面的尝试)然后加入所有这些表格(它们将是8或更多)或将使用LIKE,因为我目前的速度大致相同?我想要实现的唯一的事情是更快的选择查询,因为没有其他任何真正的数据。< / p>
这就是我现在拥有的。请记住,我仍然需要为电影+每个表格之间的关系创建表格。在这之后,我可以删除电影表中的列,并最终必须使用EACH查询加入大量表。我能在这里看到的唯一真正优势是,在个人表上创建索引会更容易,而不是覆盖一个大电影表的一个(或几个)。
我希望所有这一切对你都有意义。我很欣赏任何短期或长期的答案,就像我说这主要是为了自学,因此,我不需要/需要一个真正的商业模式。
答案 0 :(得分:2)
我不明白你现在拥有什么。您似乎只显示了表的大小,但没有显示其内部结构。您需要使用规范化规则将数据分成单独的表,然后放入正确的索引。索引将使您的查询非常快。查询上方的大小调整是什么意思?你有没有为你的查询运行EXPLAIN ANALYZE
,请发布我无法猜测你的查询结果的查询。 YT上有很多优化视频。