我有数千条记录的表格,叫做“评估”,在Assessment_Review中有超过1000条记录。使用join函数从评估表中检索评估评审结果花费了很长时间,但使用sub查询时效果更好。
对于这样的问题,使用子查询可以吗?我读过这么多文章,对于大数据的性能,联接比子查询要好得多,但我发现在我的情况下,它是不同的。或者我的数据不够大,不能通过使用子查询来解决性能问题?
发布于 2015-10-26 17:08:12
如果它更快,那就去做!有了SQL调优,无论传统智慧怎么说,实际性能始终是最好的选择。首先,我将使用联接之前的子查询规则来编写SQL select,但如果子查询提供了更快的结果,则永远不会坚持它。
顺便提一句,找到一种方法来告诉dbms如何首先获得一小部分行通常会带来更好的性能。假设您有一个表a有10,000行,表b有100,000行。您只希望表a中的内容等于表b的子集。如果可以使用子查询或with语句将表b的大小限制在更小的范围内,比如1000行,然后告诉数据库连接到表a,您的状态会好得多。换句话说,首先限制,然后加入。
还有一件事是,在具有小数据的开发数据库中优化查询时,sets...you可能会发现,当开发数据库拥有大量数据时,开发中的查询速度会非常慢。这是我唯一一次能想到用经验法则,而不是实际表现,去哪里会更好。
发布于 2015-10-26 16:53:09
在这篇文章中有一个测试,它实际上建议在FROM子句中使用子查询,而不是单独使用联接(而不是在WHERE子句中使用它们)。这似乎基本上是正确的,但是,这是一个非常复杂的问题,每次您面临性能问题时都应该重新考虑。
编辑:这篇文章引用的是MySQL,谢谢你纠正它。然而,我认为,在你的特定情况下,你需要检查这两个选项的结论是一样的。我找到了一些关于Server的文章(例如这一个),并以同样的结论完成了它。
https://stackoverflow.com/questions/33350897
复制相似问题