0

我必须每天都有一些 SQL 查询,它通常涉及我想知道的连接,例如在这个表中,哪种方法是最合适的连接方式

A("a",x,y) 
B("b",'a',z,w)

其中 a 和 b 是主键,
哪个更好?

SELECT * 
FROM a,b 
WHERE a.a=b.a AND a.x<constant

或者

SELECT *
FROM (SELECT * FROM a WHERE x < constant) t, b
WHERE t.a=b.a

这意味着,最好先创建 where 子句,然后再进行连接,或者我可以通过 where 进行连接和过滤

谢谢你!

4

3 回答 3

2

您的第一种方法是更好的方法。第二种方法是使用子查询,而在查询中使用子查询会降低性能。因为在您的第二种方法中,查询必须首先获取表中的所有行,然后根据连接条件对其进行过滤,但在第一种方法中,查询只会获取与连接条件匹配的行,这总是更快。希望我所做的尽可能简单......!

于 2013-05-01T04:59:09.347 回答
0

智能优化器(例如 oracle 的)将以相同的方式执行它们:

如果结果SELECT * FROM a WHERE x < constant 比较小:

嵌套循环连接

否则 :

哈希连接

于 2013-05-01T05:21:23.250 回答
0

首先针对手头的特定问题,尽可能简洁明了地编写代码,而不是对优化器进行微观管理。在过去的一周里,当我使用了这两种查询样式时。无论您今天测试的数据量是多少,我都可以保证明年您将在生产环境中运行更多数据。

您将始终必须调整在生产中运行缓慢的查询,但猜测哪些是一个杯子游戏。这段时间比猜测哪些查询可能有问题并提前优化所有查询要好得多。

于 2013-05-01T05:28:10.517 回答