Oracle
 sql >> Database >  >> RDS >> Oracle

customer.pk_name unire le transazioni.fk_name vs. customer.pk_id [seriale] unire le transazioni.fk_id [numero intero]

Hanno ragione. L'unione su un campo di testo CHAR(30), in particolare uno contenente i dati del nome della persona, sarà lento, gravemente inefficiente e incredibilmente fragile. Le persone cambiano nome (il matrimonio è l'esempio più ovvio) e più persone possono avere lo stesso nome.

Si desidera creare indici appropriati sulle tabelle per supportare l'ordine in cui si desidera visualizzare i dati e dimenticare il clustering. La tua procedura di ottimizzazione delle prestazioni sembra un disastro alla ricerca di un posto dove accadere. Siamo spiacenti, ma eliminare/creare tabelle in questo modo è fonte di problemi.

Vorrei iniziare con un INDICE UNICO su customer.id, un INDICE UNICO su transaction.ticket_number e un INDEX (per le prestazioni piuttosto che per la cardinalità, quindi imporre l'unicità non terribilmente importante) sulle transazioni (id, ticket_number DESC) e prenderlo da là. I dati vengono restituiti dalla tabella delle transazioni nell'ordine in cui appaiono nell'indice.

Prenderei in considerazione il clustering solo quando tutte le altre vie di ottimizzazione delle query sono state esaurite.