sql >> Database >  >> RDS >> Oracle

Prestaties:rank() versus subquery. Subquery hebben lagere kosten?

Ik weet niet precies wat je vraag is. Ja, volgens deze twee uitvoeringsplannen heeft de subquerymethode in dit geval lagere verwachte kosten. Dat lijkt niet zo verwonderlijk, omdat het de index kan gebruiken om heel snel de exacte rij te vinden waarin je geïnteresseerd bent. Vooral in dit geval hoeft de subquery slechts een heel snelle scan van de PK-index uit te voeren. De situatie kan anders zijn als de subquery kolommen bevat die geen deel uitmaken van de index.

De zoekopdracht met rank() moet alle overeenkomende rijen krijgen en rangschikken. Ik geloof niet dat de optimizer kortsluitlogica heeft om te herkennen dat dit een top-n-query is en daarom een ​​volledige sortering vermijdt, hoewel het enige waar je echt om geeft de rij met de hoogste rangorde is.

U kunt ook dit formulier proberen, dat de optimizer zou moeten herkennen als een top-n-query. Ik zou in jouw geval verwachten dat het slechts een enkele scan van het bereik op de index zou vereisen, gevolgd door een tabeltoegang.

select * 
  from (select *
          from teste_rank r
          where data_mov <= trunc(sysdate) 
            and codigo = 1
        order by data_mov desc)
  where rownum=1;


  1. Waarom krijg ik Ongeldige invoersyntaxis voor het type integer in postgresql bij het importeren van een CSV?

  2. Hoe schrijf je meerdere auteurs in een eenvoudige boekentabel op in de database?

  3. Een lijst met buitenlandse sleutels retourneren in SQLite

  4. Bulk insert van csv in postgres met golang zonder for-lus te gebruiken