如果我们使用嵌套循环连接算法连接两个表而没有条件(例如,WHERE子句),如下所示:
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
外表中的条目顺序是否始终在结果表中“保持”?在一些真实的数据库系统中,任何底层优化都会破坏排序吗?
修改
根据下面的评论,我们假设不保证订购,但
如果我们指定ORDER BY
,其顺序与外部表相同(例如,外部表按ID降序排序,那么我们将ORDER BY R1.id DECS
放入查询中),这可以根据外表的顺序进行连接的方式进行优化,不需要排序吗?一些真实的系统如何在这种查询中表现出来?
答案 0 :(得分:0)
外表中的条目顺序是否始终保持""在结果表中?
否 - 结果将以对编译查询最有效的任何顺序返回
这可以根据out表的顺序进行连接,并且不需要排序吗?
加入不是在任何特定的"顺序"。如果要指定输出的顺序(例如ORDER BY R1.id DESC
),那么编译后的查询可能先订购R1
然后执行查找,或者它可能会决定查找然后对结果进行排序更有效。如果您在R1.id
上有索引,那么查找很可能会按顺序完成,但不能保证。
编写查询以提供正确的输出,然后如果性能不符合您的要求,请查看优化。