【发布时间】:2016-10-18 11:08:34
【问题描述】:
在准备一些请求时,我正在写这个:
SELECT *
FROM ta A
JOIN tb B
ON A.col1 = B.col1
JOIN tc C
ON B.col2 = C.col2
WHERE B.col3 = 'whatever'
AND C.col4 = 'whatever2'
我开始思考以下问题:
SELECT *
FROM ta A
JOIN (SELECT * FROM tb WHERE col3 = 'whatever') B
ON A.col1 = B.col1
JOIN (SELECT * FROM tc WHERE col4 = 'whatever2') C
ON B.col2 = C.col2
(如果我没记错的话,结果应该是一样的)。我想知道它是否会明显更快?我的猜测是它会,但我有兴趣知道为什么/为什么不?
(因为我们的服务器现在宕机了,我现在不能自己测试,所以在这里问,希望你不要介意。)
(如果重要的话,引擎是 Vertica,但我的问题并不是 Vertica 特有的)
【问题讨论】:
-
它们是一样的吗?尝试一下。哪个更快?尝试一下。使用本地测试服务器。你没有?设置它。
-
我记得在
Oracle上问过自己同样的问题,当我检查解释计划时,它是相似的。您可以为您的数据库尝试相同的操作。 -
您的问题是特定于 Vertica,因为它取决于查询的优化方式。解决这种性能的通常方法是索引、分区和算法的选择。通常,我们依靠优化器来做出合理的决定。