Oracle
 sql >> Datenbank >  >> RDS >> Oracle

kunde.pk_name beitritt zu transaktionen.fk_name vs. kunde.pk_id [seriell] beitritt zu transaktionen.fk_id [ganzzahl]

Sie haben recht. Der Beitritt zu einem CHAR(30)-Textfeld – insbesondere einem, das Personennamendaten enthält – wird langsam, grob ineffizient und unglaublich zerbrechlich sein. Menschen ändern ihre Namen (Heirat ist das offensichtliche Beispiel) und mehrere Personen können denselben Namen haben.

Sie möchten geeignete Indizes für Ihre Tabellen erstellen, um die Reihenfolge zu unterstützen, in der Daten angezeigt werden sollen, und Clustering vergessen. Ihr Leistungsoptimierungsverfahren klingt wie eine Katastrophe, die nach einem Ort sucht, an dem sie passieren kann. Tut mir leid, aber das Löschen/Erstellen von Tabellen auf diese Weise verursacht Ärger.

Ich würde mit einem EINZIGARTIGEN INDEX auf customer.id, einem EINZIGARTIGEN INDEX auf transaction.ticket_number und einem INDEX (für die Leistung und nicht für die Kardinalität, daher ist die Durchsetzung der Eindeutigkeit nicht so wichtig) für Transaktionen (id, ticket_number DESC) beginnen und daraus nehmen dort. Daten werden von der Transaktionstabelle in der Reihenfolge zurückgegeben, in der sie im Index erscheinen.

Ich würde Clustering nur in Betracht ziehen, wenn alle anderen Wege der Abfrageoptimierung erschöpft sind.