Mysql
 sql >> база данни >  >> RDS >> Mysql

Комбиниране на SELECT DISTINCT с UNION DISTINCT в MySQL - има ли ефект?

Трябва да проверите плановете за изпълнение. Въпреки това бих очаквал, че плановете за изпълнение са различни -- или поне би трябвало да бъдат при някои обстоятелства.

Първата заявка:

SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2

може лесно да се възползва от индексите на table1(a, b, c) и table2(a, b, c) преди извършване на последното UNION . Това трябва да ускори крайното обединение чрез намаляване на размера на данните. Второто запитване няма това предимство.

Всъщност най-ефективният начин да напишете тази заявка вероятно би бил да имате двата индекса и да използвате:

SELECT DISTINCT a, b, c FROM table1 t1
UNION ALL
SELECT DISTINCT a, b, c
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.a = t1.a and t2.b = t1.b and t2.c = t1.c)

Това е почти идентично, въпреки че може да обработва NULL стойности във втората таблица малко по-различно.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel Eloquent Ignore Casing

  2. Заявка със сложни критерии:използване на JPA вместо NativeQuery

  3. Как да конфигурирате и използвате MySQL с Django?

  4. MySQL MIN() и MAX() с LIMIT

  5. MYSQL:Получаване на съществуващ първичен ключ при вмъкване на запис с дублиран уникален ключ?