#### 8.2.1.18 DISTINCT 优化

[](<>)[](<>)

`清楚的`结合`订购方式`在许多情况下需要一个临时表。

因为`清楚的`可以使用`通过...分组`，了解 MySQL 如何处理`订购方式`要么`拥有`不属于所选列的子句。看[第 12.20.3 节，“MySQL 对 GROUP BY 的处理”](group-by-handling.html).

在大多数情况下，一个`清楚的`子句可以被认为是一个特例`通过...分组`.例如，以下两个查询是等效的：

```
SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;

SELECT c1, c2, c3 FROM t1
WHERE c1 > const GROUP BY c1, c2, c3;
```

由于这种等价性，适用于的优化`通过...分组`查询也可以应用于带有`清楚的`条款。因此，有关优化可能性的更多详细信息`清楚的`查询，见[第 8.2.1.17 节，“按优化分组”](group-by-optimization.html).

组合时`限制 *`行数`*`和`清楚的`, MySQL 一发现就停止*`行数`*唯一的行。

如果您不使用查询中命名的所有表中的列，MySQL 会在找到第一个匹配项后立即停止扫描任何未使用的表。在以下情况下，假设`t1`以前用过`t2`（您可以检查[`解释`](explain.html))，MySQL 停止读取`t2`（对于任何特定的行`t1`) 当它找到第一行时`t2`：

```
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;
```
