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