Sql 创建多个联接表的视图是否比在查询中直接使用联接获取数据更快?

Sql 创建多个联接表的视图是否比在查询中直接使用联接获取数据更快?,sql,mysql,Sql,Mysql,下面是命中的查询,每个表都有超过100000条记录 SELECT b.login as userEmail, imgateway_instance_id as img, u.id as userId FROM buddy b INNER JOIN `user` u ON b.username = u.login INNER JOIN bot_to_buddy btb ON b.id = btb.buddy_id INNER JOIN bot ON btb.b

下面是命中的查询,每个表都有超过100000条记录

   SELECT b.login as userEmail, imgateway_instance_id as img, u.id as userId 
   FROM  buddy b
   INNER JOIN `user` u ON b.username = u.login
    INNER JOIN bot_to_buddy btb ON b.id = btb.buddy_id
    INNER JOIN bot ON btb.bot_id = bot.id
    WHERE u.id IN 14242

不,使用视图无法获得性能。在幕后,在查询视图时会运行原始查询。

否,使用视图无法获得性能。在幕后,在查询视图时会运行原始查询。

有时使用视图可以获得一点性能,如中所述

另一方面,这本书的作者写了这个博客:

有时使用视图可以获得一点性能,如中所述

另一方面,这本书的作者写了这个博客:

一般来说,这取决于您提交查询的方式

视图可能会更快:

例如,在PHP中,通常的做法是“动态”提交查询(即不作为一个查询)。 这意味着MySQL必须在每次调用时编译查询。使用视图时,此操作在创建视图时只执行一次

关于MySQL作为一个DBMS,我在早期版本中听说过使用视图。(不过,我不知道目前的情况如何)


作为此类问题的一般规则,只需对查询进行基准测试,即可获得真实的结果。看起来您已经用大量数据填充了数据库,因此这应该会产生有意义的结果。(别忘了禁用MySQL中的缓存)。

一般来说,这取决于您提交查询的方式

视图可能会更快:

例如,在PHP中,通常的做法是“动态”提交查询(即不作为一个查询)。 这意味着MySQL必须在每次调用时编译查询。使用视图时,此操作在创建视图时只执行一次

关于MySQL作为一个DBMS,我在早期版本中听说过使用视图。(不过,我不知道目前的情况如何)


作为此类问题的一般规则,只需对查询进行基准测试,即可获得真实的结果。看起来您已经用大量数据填充了数据库,因此这应该会产生有意义的结果。(别忘了禁用MySQL中的缓存)。

没有什么理由让视图运行您的查询,而不是自己运行查询。使用MySQL会更快

MySQL中的视图通常实现得很差,我们不得不退出 在我们的许多项目中使用它们


检查并解释当您将查询放在视图中时,它会做什么,查看该查询,即使它是视图的一部分,它也可能仍然使用正确的索引,因此它至少不会变慢。

没有什么理由让视图运行您的查询而不是自己运行查询。使用MySQL会更快

MySQL中的视图通常实现得很差,我们不得不退出 在我们的许多项目中使用它们


检查并解释当您将查询放置在视图中时,查询所做的操作,查看该查询时,即使它是视图的一部分,也可能仍然使用适当的索引,因此它至少不会变慢。

对具有与您相同数量记录的表使用联接通常非常慢。这是因为联接将遍历表中的每个记录,这使得查询需要花费大量时间


作为一个有个人经验的解决方案,我建议您尽量使用
WHERE
来过滤查询结果,然后使用联接来减少查询结果。

对记录量与您的记录量一样大的表使用联接通常非常慢。这是因为联接将遍历表中的每个记录,这使得查询需要花费大量时间


作为一个有个人经验的解决方案,我建议您尽量使用
WHERE
来过滤结果,然后使用联接来减少查询结果。

jQuery标签在这里有什么作用?这是一个经验问题。时间到了。我打赌视图速度更快。jQuery标记在这里有什么用?这是一个经验问题。时间到了。我打赌浏览速度更快。我不确定mysql。在oracle中,它不会获得titanoboa提到的任何性能。不确定mysql。在oracle中,它不会像titanoboa提到的那样获得任何性能。根据我们的经验,目前的情况是,MySQL中应该完全避免视图-您需要花费更多的时间对它们进行故障排除(出于性能和限制原因)比你使用它们所能获得的更多。@不,这应该是一个答案:故障排除时间也要花钱。根据我们的经验,目前的情况是,在MySQL中应该完全避免视图-你花更多的时间对它们进行故障排除(出于性能和限制原因)比你使用它们所能获得的更多。@nos这应该是一个答案:排除故障的时间也要花钱。