News zu Oracle

SQL Tuning Tipp: ANY- und ALL- Operator

Der heutige SQL Tuning Tipp be­schäf­tigt sich mit den Ope­ra­to­ren ANY und ALL und deren Aus­wir­kun­gen auf das Thema Performance. 

ALL vs. ANY

Der Per­for­man­ce­ge­winn ist bei ALL nicht wirklich erheblich, weil hier ähnlich der adäquaten For­mu­lie­rung (max() in Subquery) ein Maximum ermittelt werden muss. Deut­li­cher zum Tragen kommt der Vorteil beim ANY-Operator, da hier im Gegensatz zum adäquaten min() von einem Ab­bruch­kri­te­ri­um pro­fi­tiert werden kann.

In beiden Fällen ist jedoch die Car­di­na­li­ty-Schätzung bei Ver­wen­dung von ANY / ALL besser als bei der Ver­wen­dung von Ag­gre­ga­ten in den Sub­queries, da hier wiederum der Fakt greift, dass Sta­tis­ti­ken auf Funk­ti­ons­wer­ten nicht per se vorhanden sind. Je exakter die Car­di­na­li­ty-Schätzung ist, desto besser können auf dieser Query auf­bau­en­de weitere Schritte bewertet werden.

Beispiel ohne ANY-Operator (Mit­ar­bei­ter in München, die mehr verdienen als irgendein Mit­ar­bei­ter in Seattle)

SELECT first_name, last_name, salary
FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
WHERE city='Munich'
AND salary > (
  SELECT min(salary)
  FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
  WHERE city='Seattle');

Adäquates Beispiel mit ANY-Operator

SELECT first_name, last_name, salary
FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
WHERE city='Munich'
AND salary > ANY (
  SELECT salary
  FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
  WHERE city='Seattle');

Beispiel ohne ALL-Operator (Mit­ar­bei­ter in München, die mehr verdienen als alle Mit­ar­bei­ter in Seattle)

SELECT first_name, last_name, salary
FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
WHERE city='Munich'
AND salary > (
  SELECT max(salary)
  FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
  WHERE city='Seattle');

Adäquates Beispiel mit ALL-Operator

SELECT first_name, last_name, salary
FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
WHERE city='Munich'
AND salary > ALL (
  SELECT salary
  FROM employees JOIN departments using (department_id) JOIN locations using (location_id)
  WHERE city='Seattle');
Hier findest du weitere Posts zu den Themen SQL Tuning bzw. Per­for­mance Tuning aus unserem News Bereich. 
icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email