【问题标题】:SQL query - cost of using DISTINCTSQL 查询 - 使用 DISTINCT 的成本
【发布时间】:2015-03-11 20:27:13
【问题描述】:

使用 DISTINCT 对 SQL 查询的执行计划的查询成本有很大影响吗?

在有 100,000 行的表上,会有什么区别:

select * from TABLE

select distinct(*) from TABLE 

以毫秒为单位?

【问题讨论】:

  • 如果您在该表上有一个键,则两者之间不会有任何区别。由于您要选择所有字段,因此键将使每一行都不同
  • distinct不是函数
  • 我认为这将是一些差异,因为不同的检查是否有任何差异,但全选没有。
  • 会有很大的不同。数据库必须对所有列上的所有行进行排序或散列。只要看看执行计划,你就会明白。但是,无法以毫秒为单位来量化额外成本。取决于您的硬件、列数和列的数据类型。

标签: sql database query-optimization distinct


【解决方案1】:

通常,答案是 很多 毫秒。 select distinct 相当于在所有列上执行group by。您不太可能对所有列都有索引,因此索引通常不会很有用。

某些数据库引擎可能足够聪明,可以检测其中一列是声明为distinct 还是primary key。在这种情况下,可能会有优化查询的引擎。

但是,一般来说,除非需要,否则应避免使用select distinct

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 2011-05-24
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多