sql >> Databasteknik >  >> RDS >> Oracle

Oracle snabbare sökfråga

Jag har faktiskt inte tillgång till Oracle nu men den bästa SQL-frågan för personsökning är säkert följande

select *
from (
        select rownum as rn, a.*
        from (
                select *
                from my_table
                order by ....a_unique_criteria...
            ) a
    )
where rownum <= :size
    and rn >  (:page-1)*:size

http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

För att uppnå en konsekvent personsökning du bör ordna rader med ett unikt kriterium , om du gör det undviker du att ladda för sida X en rad som du redan har laddat för en sida Y ( !=X ).

EDIT:

1) Beställa rader med ett unikt kriterium innebär att beställa data på ett sätt så att varje rad kommer att behålla samma position vid varje körning av frågan

2) Ett index med alla uttryck som används i ORDER BY-satsen hjälper dig att få resultat snabbare, speciellt för de första sidorna. Med det indexet behöver exekveringsplanen som valts av optimeraren inte sortera raderna eftersom den kommer att returnera rader som rullar indexet i naturlig ordning.

3) Förresten, det snabbaste sättet att hitta resultat från en fråga är att köra frågan endast en gång och att hantera allt flöde från applikationssidan.



  1. SQL, hur man uppdaterar en tabellstruktur

  2. Docker PGMASTER PostgreSQL versionsuppdatering

  3. Hur programmerar man en MySQL-utlösare för att infoga rad i en annan tabell?

  4. SQL Server beroenden