Freitag, September 11, 2015

Lokale und globale Hints

Es gibt Blog-Einträge, deren Inhalt man in einem Satz zusammenfassen kann. Bei den Artikeln von Stefan Koehler in seinem SAP on Oracle Blog ist das in der Regel nicht der Fall, was vermutlich einer der Gründe dafür ist, dass ich mir mit dem Exzerpieren seiner Beiträge in der Regel relastiv viel Zeit lasse - manchmal so lange, dass sie rechtzeitig wieder aus meinem Blog-Reader verschwunden sind, ehe ich sie berücksichtige. Vor drei Wochen erschien der Artikel Insights into SQL hints - Embedded global and local hints and how to use them, der zunächst auf grundlegende Artikel (einen eigenen und einen von Jonathan Lewis) verweist und die Verwendung von Mauro Paganos SQLd360 empfieht. Nach dem Hinweis, dass Hints nur in Ausnahmefällen als "last resort" verwendet werden sollten (dem ich vorbehaltlos zustimme) bildet die Erläuterung, was denn eigentlich ein "embedded hint" ist, den eigentlichen Eigenstieg in den Artikel: "embedded hints" sind solche, die in SQL Statements verwendet werden - und insofern zu unterscheiden von "outline hints", die in outlines und baselines verwendet werden. Ich schenke mir diese terminologische Genauigkeit und rede in der Folge nur noch von Hints.

Die nächste definitorische Aussage unterscheidet zwischen globalen und lokalen Hints:
  • local hint: gelten für den query block, in dem sie erscheinen. Es folgen Informationen zu ihrem Auftreten im SAP-Kontext, aber SAP ist nicht mein Thema.
  • global hint: werden mit einem vorangestellten @-Symbol vor der Angabe des query-Blocks, auf den sie sich beziehen, ausgezeichnet (und die Hints in outlines sind immer globale Hints): sie erscheinen also an einer zentralen Stelle (zu Beginn der Query) und sind nicht über den Text der Query verteilt. Sie sind insbesondere bei der Definition von Queries, die auf Views zugreifen, relevant, da einer Ergänzung der Hints im View-Text in der Regel keine Option ist.
Es folgt ein umfangreiches (SAP-)Beispiel, das zeigt, dass ein FULL-Hint für eine Query mit View-Zugriff kalt lächelnd ignoriert wird, weil er aufgrund einer Transformation gegenstandslos wird: der Query-Block, dem der Hint zugeordnet ist, wird im Rahmen der Transformation in einen anderen Query-Block gemerget. Um den Hint wirksam werden zu lassen, muss man ihn entweder in der View ergänzen oder als globalen Hint für einen Query-Block, der die Transformation übersteht (bzw. durch sie erzeugt wird).

War gar nicht so umfangreich, wie mir jetzt auffällt - aber wie üblich hat der Herr Koehler seine Ausführung mustergültig mit Belegen und Detail-Erläuterungen versehen.

Keine Kommentare:

Kommentar veröffentlichen