我有一个SQL查询格式为树(A⨝B)⨝(C⨝D)⨝(E⨝F)⨝(G⨝H)⨝(I⨝J)包含不同的连接。我想知道也就是说,我们可以分别找到每个连接操作的时间,就像子表达式(A⨝B)可以花费多少时间一样。或者(C⨝D)可以。而不是整个表达。或者我们如何只找到子表达式(A⨝B)⨝(C⨝D)的时间。我已经使用Java语言将我的SQL查询转换为树。 在此先感谢。
答案 0 :(得分:0)
您的问题的答案就是运行您想要的所有可能组合并进行衡量。为什么?请继续阅读。
在执行查询时,数据库非常棘手。其中一些专注于为您提供第一个匹配的条目(例如适用于网页);其他的用于整个结果集,完全跳过索引并改为读取磁盘页面(最佳方式)。
另一种方法是获取SQL语句的 COST 。通常,使用EXPLAIN PLAN < my_select >
您将获得有关计划成本的详细信息。不是执行时间,而是相对成本。成本在数据库之外没有任何意义,但有助于SQL Optimizer决定哪个执行计划看起来最好。
此外,数据库缓存起着巨大的作用。第二次运行查询时,它运行速度可能比第一次快得多,因为数据库(或操作系统)仍然拥有内存中的所有磁盘页。
最后,索引可以大大加快查询速度。如果您创建了正确的查询速度,那么您将注意到查询速度的(大)差异,而不是没有。
简而言之,您需要测量它们并查看。