
168 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
/* No twin - Informant is Blessed */
(ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = ’Yes’) or
/* Twin broken off - Informant is Blessed */
(td.participation = ’Aborted’
and id.suspect = 1 and id.future_contact = ’Yes’) or
/* Twin broken off - No inform - Have partner */
(td.participation = ’Aborted’ and ISNULL(id.suspect) and p2.dead = 0))
and
l.event = ’Finished’
/* Get at area code */
and substring(p1.postal_code, 1, 2) = pg.code
/* Not already distributed */
and (h.nurse is NULL or h.nurse=00 or h.doctor=00)
/* Has not refused or been aborted */
and not (h.status = ’Refused’ or h.status = ’Aborted’
or h.status = ’Died’ or h.status = ’Other’)
order by
tvid;
Einige Erl¨auterungen:
concat(p1.id, p1.tvab) + 0 as tvid
Wir wollen nach den verketteten id und tvab in numerischer Reihenfolge
sortieren. Indem wir 0 hinzuf¨ugen, bringen wir MySQL dazu, das Ergebnis als
Zahl zu behandeln.
Spalte id Diese identifiziert ein Zwillingspaar. Sie ist in allen Tabellen Schl¨ussel.
Spalte tvab
Diese identifiziert ein Zwillingspaar. Sie hat einen Wert von 1 oder 2.
Spalte ptvab
Sie ist die Umkehrung von tvab. Wenn tvab 1 ist, ist sie 2, und umgekehrt.
Sie ist daf¨ur da, MySQL die Optimierung der Anfrage zu erleichtern.
Diese Anfrage demonstriert unter anderem, wie man ein Nachschlagen (Lookup) in einer
Tabelle von derselben Tabelle aus mit einem Join durchf¨uhrt (p1 und p2). In dem Beispiel
wird das dazu benutzt, um festzustellen, ob der Partner eines Zwillings vor Erreichen des
65. Lebensjahrs starb. Wenn das der Fall ist, wird die Zeile nicht zur¨uckgegeben.
Das Geschilderte existiert in allen Tabellen mit zwillingsbezogenen Informationen. Wir
haben einen Schl¨ussel auf beide id,tvab (alle Tabellen), und auf id,ptvab (person_data),
um Anfragen schneller zu machen.
Auf unserer Produktionsmaschine (einer 200MHz-UltraSPARC) gibt diese Anfrage etwa 150
bis 200 Zeilen zur¨uck und ben¨otigt weniger als eine Sekunde.
Die aktuelle Anzahl von Datens¨atzen in den oben benutzten Tabellen:
Tabelle Zeilen
person_data 71074
lentus 5291
twin_project 5286
Comentarios a estos manuales