• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DISTINCT优化

    DISTINCTORDER BY在许多情况下,结合需要一个临时表。

    因为DISTINCT可能使用GROUP BY,所以了解MySQL如何处理不属于所选列的ORDER BYor HAVING子句中的列。请参见“ GROUP BY的MySQL处理”。

    在大多数情况下,DISTINCT子句可以视为的特殊情况GROUP BY。例如,以下两个查询是等效的:

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

    由于这种等效性,适用于GROUP BY查询的优化也可以应用于带有DISTINCT子句的查询。因此,有关DISTINCT查询优化可能性的更多详细信息,请参见“按优化分组”。

    与结合使用时,MySQL一旦找到唯一的行,就会停止运行。LIMIT row_countDISTINCTrow_count

    如果您不使用查询中命名的所有表中的列,则MySQL会在找到第一个匹配项后立即停止扫描任何未使用的表。在以下情况下,假设t1以前使用过t2(您可以通过进行检查EXPLAIN),则MySQL t2t1找到以下内容的第一行时将停止从中读取(对于中的任何特定行)t2

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