sql >> Database >  >> RDS >> Oracle

customer.pk_name samenvoegen met transacties.fk_name vs. klant.pk_id [serienummer] samenvoegen met transacties.fk_id [geheel getal]

Ze hebben gelijk. Deelnemen aan een CHAR(30)-tekstveld - met name een veld dat gegevens over de naam van een persoon bevat - zal langzaam, buitengewoon inefficiënt en ongelooflijk kwetsbaar zijn. Mensen veranderen hun naam (huwelijk is het voor de hand liggende voorbeeld), en meerdere mensen kunnen dezelfde naam hebben.

U wilt geschikte indexen voor uw tabellen maken om de volgorde waarin u gegevens wilt weergeven te ondersteunen, en clustering vergeten. Uw procedure voor prestatie-optimalisatie klinkt als een ramp op zoek naar een plek om te gebeuren. Sorry, maar het laten vallen/maken van de tabellen is vragen om problemen.

Ik zou beginnen met een UNIEKE INDEX op customer.id, een UNIEKE INDEX op transaction.ticket_number, en een INDEX (voor prestaties in plaats van kardinaliteit, dus het afdwingen van uniciteit niet erg belangrijk) op transacties (id, ticket_number DESC), en neem het van daar. Gegevens worden geretourneerd uit de transactietabel in de volgorde waarin ze in de index verschijnen.

Ik zou alleen clustering overwegen als alle andere mogelijkheden voor query-optimalisatie zijn uitgeput.



  1. Hoe sqlcmd &bcp op Ubuntu te installeren

  2. Groeperen met een Case Statement

  3. Zijn query's van het SELECT-type het enige type dat kan worden genest?

  4. Wat is een scalaire UDF in SQL Server?