sql >> Database >  >> RDS >> Oracle

Wanneer zal een correcte SQL een verkeerd resultaat opleveren?

Een ding dat u kunt doen, is de NO_QUERY_TRANSFORMATION-hint toepassen die is geïntroduceerd in Oracle 10g.

Als dit het gewenste resultaat oplevert, weet je dat je te maken hebt met een Oracle-bug, aangezien geen enkele hint de werkelijke uitkomst van een zoekopdracht zou moeten veranderen.

Tegelijkertijd heeft u uw probleem misschien opgelost, behalve dat uw uitvoeringsplan misschien niet bevredigend is.

De bug waarmee u wordt geconfronteerd (ik weet niet of het een bekende bug is) is dat de Oracle-optimizer de bedoeling van de oorspronkelijke query mogelijk niet correct interpreteert bij het transformeren van de query voor een beter uitvoeringsplan (weergaven samenvoegen, enz.). Door de hint te gebruiken instrueer je de optimizer om dit niet te doen.

Het fenomeen wordt het vaakst gezien bij complexe zoekopdrachten met inline prestatieweergaven.

Momenteel heb ik geen codevoorbeelden om dit probleem te reproduceren, maar ik werk eraan.

UPDATE:Het lijkt erop dat dit in feite is waar de hint voor bedoeld is - ik heb dit gevonden:

doumentatie .




  1. Hoe age() werkt in PostgreSQL

  2. Controleer of een object een primaire sleutel is met OBJECTPROPERTY() in SQL Server

  3. MySQL:gegroepeerde items tellen?

  4. Grote transacties afhandelen met streamingreplicatie en MariaDB 10.4