Mysql 复杂的sql查询是否变得足够复杂,以至于执行多个查询会更高效?

Mysql 复杂的sql查询是否变得足够复杂,以至于执行多个查询会更高效?,mysql,sql,Mysql,Sql,我有这样一种感觉,撇开低效编写的查询不谈,从数据库中获取所需信息总是越快,所做的查询越少。我不知道我是从哪里得到这个想法的,我产生的查询越复杂,它就越有挑战性(我真的在用所有这些连接做MySQL吗?)。我不是在征求程序员对易用性或最佳编码实践的意见,但是否存在这样的条件:在这种条件下,一个查询被分解成多个步骤,程序会执行得更快?如果是这样的话,在进行编码和比较之前,人们如何有根据地猜测查询可能达到这样的上限 是的,尽管MySQL不太可能。原因是MySQL没有一个真正复杂的基于成本的优化器。中间表

我有这样一种感觉,撇开低效编写的查询不谈,从数据库中获取所需信息总是越快,所做的查询越少。我不知道我是从哪里得到这个想法的,我产生的查询越复杂,它就越有挑战性(我真的在用所有这些连接做MySQL吗?)。我不是在征求程序员对易用性或最佳编码实践的意见,但是否存在这样的条件:在这种条件下,一个查询被分解成多个步骤,程序会执行得更快?如果是这样的话,在进行编码和比较之前,人们如何有根据地猜测查询可能达到这样的上限

是的,尽管MySQL不太可能。原因是MySQL没有一个真正复杂的基于成本的优化器。中间表的优点是其大小是已知的。基于成本的优化器可以利用这些信息来改进查询计划

当一个子查询在一个查询中重复多次时,这样做会有所帮助。中间表确保只处理一次(尽管CTE通常会做同样的事情)

另一个真正有用的地方是向中间表添加索引。添加索引——并使用它们——可以大大节约成本,而不仅仅是弥补创建索引的成本

也就是说,我通常不鼓励为此目的使用中间表,除非多个查询需要结果。我发现仅仅是调试的开销就不值得了——出于某种原因,我并不总是删除中间表,然后浪费时间想知道为什么一些修改不起作用


更重要的是,随着数据的变化,修改查询可能是一件痛苦的事情。例如,我发现在单个查询中更改列名比在多个查询中扩展逻辑时更简单。

是否存在这样的条件,即在将查询分解为多个步骤的情况下,程序执行得更快?对在这种情况下,执行计划生成器时间段不足以生成真正最有效的计划。此外-static表可能太旧,无法在没有提示的情况下构建最有效的计划(使用太少)…一般规则是:到数据库的往返次数越少越好,但可以肯定的是,一切都有例外