我很想知道当我们使用DISTINCT关键字通过多个表查询数据时,sqldeveloper究竟是如何完成工作的。
我问这个的原因是因为我发现当我使用DISTINCT关键字时,sqldeveloper需要花费很多时间才能获取结果
答案 0 :(得分:3)
当您指定select distinct
时,数据库需要完成删除重复值的工作。
在少数情况下,select
中的所有列/表达式都可能位于索引中。如果是这样,Oracle应该足够聪明以使用索引。在这种情况下,select distinct
可能不会对性能产生很大影响。
否则,数据库需要聚合数据。 select distinct
和group by
使用相同的算法。它们中有很多,但它们肯定比不使用select distinct
慢。
另一个因素是数据库在从结果集中删除重复项之前不会返回任何结果。在其他情况下,数据库可以在行可用时开始删除。
如果您真的需要它,您应该只使用select distinct
,因为您知道运行查询会产生开销。