J'ai deux tables qui ressemblent à ceci:optimisation de schéma Oracle pour 1: 0..1 relation
table A: FieldID NUMBER (PK), other non-relevant fields
table B: FieldID NUMBER (PK/FK), other non-relevant fields
Les tables mappées 1: relation 0..1. Spécifiquement, après qu'une nouvelle ligne est insérée dans la table A, à un certain moment dans la future table B sera remplie avec des données supplémentaires.
Cette conception a été à l'origine préférée à une table étendue unique afin d'avoir des champs non nulles partout (car il n'y a aucune possibilité de prédire quand la partie "B" des données sera remplie). Maintenant ... Les performances d'une sélection de jointure de A et B sont étonnamment horribles. Nous parlons de quelques lignes de 100k dans les deux tables, et pourtant une jointure interne simpe prend énormément de temps à compléter. En plus de déplacer les champs de B dans A (chose que je ne préfère pas faire pour éviter les vérifications "nulles" supplémentaires), comment puis-je améliorer mes performances?
Définir "affreux", en particulier est-il pour les requêtes PK simples ou FULL TABLE SCAN? –
Salut, c'est pour une recherche PK. Si je fais (par exemple) sélectionner * de A, B où A.FieldID = B.FieldID et rownum <= 10, cela prend ~ 20 secondes pour terminer. – Andrea
Veuillez poster le plan d'explication. [Tracer la requête] (http://docs.oracle.com/cd/E11882_01/server.112/e16638/sqltrace.htm#PFGRF01020) peut également aider à comprendre pourquoi cela prend autant de temps. –